已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
昨天关门了。
Improve this question
所以问题陈述是:
给定一个int值n
,后面跟着n
对数字,它们是点的坐标。你必须按照输入的顺序打印出点,然后按照到原点的距离排序打印它们。
要使其正常工作,需要对Point类使用<
运算符
用C++编写解决方案
示例输入
5 8 9 6 5 3 4 3 5 2 6
示例输出2
(8,9) (6,5) (3,4) (3,5) (2,6)
(3,4) (3,5) (2,6) (6,5) (8,9)
因此,我尝试为Point
类设计单独的函数来存储这些对,下面是Point
类的cpp:
//Compare
bool Point::operator==(const Point& point) const {
return ((x == point.x) && (y == point.y));
}
//Distance
// d=√((x2 – x1)² + (y2 – y1)²)
double Point::operator-(const Point& point) const {
return (sqrt(pow(point.x-x,2) + pow(point.y-y,2)));
}
// Less then (add this)
bool Point::operator<(const Point& point) const {
return (((point.x) < (x))&& (point.y)<(y));
}
//Constructor acts as a mutator
//to get values
Point::Point(double new_x, double new_y)
{
x = new_x;
y = new_y;
}
//MUTATOR FUNCTIONS
void Point::SetX(double new_x)
{
x = new_x;
}
void Point::SetY(double new_y)
{
y = new_y;
}
我不知道如何为main()
编写一个display函数,它将对对进行排序并根据距离返回它们,我如何使排序工作呢?
void displayPoints(vector<Point> &points) {
// Finish
for (int i=0; i<points.size(); i++) {
cout << points[i] << " ";
}
cout << endl;
}
总的来说,我需要调用sort(points.开始(),points.end()),然后调用displayPoints(points),它应该是经过排序的
2条答案
按热度按时间monwx1rj1#
只有当
this->x
和this->y
小于point
中的x
和y
时,operator<
的实现才会返回true
,这显然没有与origo进行距离比较:如果
this
更接近origo,你需要比较的是它们到origo的距离--但是,你真的需要这个距离吗?不,比较平方距离会产生完全相同的结果。为了完成你所需要的打印,你可以为
operator<<
添加一个重载,同时,你也可以添加一个operator>>
重载来读取Point
:这样,你就可以像这样读取和打印
Point
:Demo
如果你想要一个单独的
displayPoints
函数,让它接受vector
乘以const&
:或者更简单地,使用基于范围的
for
-循环:gj3fmq9x2#
您已经有了计算两点之间距离的算法,只需要将该算法应用于
operator<
(即,它不属于operator-
)。如果this
(比较的左侧Point
)比输入点(比较的右侧Point
)更接近原点,否则返回false
。例如,尝试类似下面的操作(假设原点为
(0,0)
):您可以考虑在
Point
类中添加一个DistanceFrom()
类型的方法,例如:然后,您可以在
operator<
中使用它,例如:无论哪种方式,您都可以使用标准
std::sort()
算法实现实际排序,该算法使用operator<
对项目进行排序,例如: