我正在尝试使用std::vector
排序algorithm::sort
,但我收到运行时错误
Invalid operator <
。
以下是我的代码。
struct Point {
double x_cord;
double y_cord;
int id;
Point(int d, double x, double y) {
x_cord = x;
y_cord = y;
id = d;
}
};
struct compareX {
bool operator ()(Point * left, Point* right) const {
if (left->x_cord < right->x_cord)
return true;
return true;
}
};
struct compareY {
bool operator ()(Point * left, Point* right) const {
if (left->y_cord <= right->y_cord) return true;
return true;
}
};
现在我在填充值后调用它。
std::sort( posVector.begin(), posVector.end(), compareX());
答案 0 :(得分:4)
您的比较函数始终返回true!
答案 1 :(得分:2)
您的比较函数似乎总是返回true。偶尔返回错误可能是个好主意。并且(严肃地说)比较(x.y)坐标并不像它看起来那么简单 - 你可能想在实现它之前考虑一下。
答案 2 :(得分:1)
如果您使用std::vector<Point>
,则必须
struct compareX {
bool operator ()(const Point& left, const Point& right) const {
return left.x_cord < right.x_cord;
}
};
struct compareY {
bool operator ()(const Point& left, const Point& right) const {
return left->y_cord < right->y_cord;
}
};
您的代码存在问题
比较类接受指针而不是被排序的对象(如果std::vector<Point>
已排序,即不是std::vector<Point*>
)。如果你正在排序指针的矢量,那就没关系了。
比较类包含错误输入 - 总是返回true(如前所述)
compareY使用<=
代替<
。这是个坏主意,因为标准算法(包括排序)期望语义较少(而不是less_or_equal-语义)。
答案 3 :(得分:0)
重载'&lt;' Point
类的运算符。