class Point2D
{
friend ostream& operator<< (ostream&, const Point2D&);
protected:
int x; //can sort by x
int y; //can sort by y
double dist; //can sort by dist
public:
Point2D () {x=0; y=0;}
Point2D (int a, int b) {x=a; y=b;}
void setX (int);
void setY (int);
void setDist();
double getDist() const;
int getX ();
int getY ();
}
int main()
{
vector<Point2D> vect;
sort (vect.begin(), vect.end());
//Print all vector elements
for (int x=0; x<vect.size(); x++)
cout << vect[x] << endl;
}
我正在尝试使用sort
对对象矢量进行排序。
但是当我在上面运行我的代码时,我会收到很多重复的错误:
instantiated from here - sort (vect.begin(), vect.end());
我希望能够按 x,y或dist 排序。
我想我可能需要重载>
或==
运算符才能使用C ++ std库提供的sort
?
重载代码怎么样?我知道如何重载像<<
这样的ostream运算符来显示数据,但是在这种复杂的情况下,我们如何进行重载以便让我们使用sort
?
答案 0 :(得分:5)
如果您的编译器支持C ++ 11,您可以执行以下操作:
vector<Point2D> vect;
// sort by x
sort (vect.begin(), vect.end(), [](Point2D const &a, Point2D const &b) { return a.getX() < b.getX(); });
// sort by y
sort (vect.begin(), vect.end(), [](Point2D const &a, Point2D const &b) { return a.getY() < b.getY(); });
注意,要使上述示例正常工作,您要么将成员函数getX
和getY
定义为const
,要么从输入参数中删除const
限定符lambdas。
如果您的编译器不支持C ++ 11,那么您可以定义如下的可比数字:
bool compare_x(Point2D const &a, Point2D const &b)
{
return a.getX() < b.getX();
}
bool compare_y(Point2D const &a, Point2D const &b)
{
return a.getY() < b.getY();
}
并拨打sort
,如下所示:
// sort by x
sort(vect.begin(), vect.end(), compare_x);
// sort by y
sort(vect.begin(), vect.end(), compare_y);