鉴于以下
class Coordinate {
int i,j;
};
list<shared_ptr<Coordinate>> coordinates;
(
Coordinate
只是我的代码真正包含的内容的简单得多。)我想根据给定坐标list
的最小欧几里得距离对iCenter,jCenter
进行排序。最靠近此坐标的Coordinate
应该在列表coordinates
中的第一位置。我还想使用以下结构struct ComparatorForCoordinate {
bool operator() (const shared_ptr<Coordinate>& c1, const shared_ptr<Coordinate>& c2) {
// return distance(c1 to center) > distance(c2 to center)
}
};
// sorting:
coordinates.sort(ComparatorForCoordinate());
我的问题是我的
operator()
需要知道坐标iCenter,jCenter
。如何将这两个double值传递给比较函数?天真的尝试只是让运算符(operator)另外有两个用于中心位置的双参数不起作用。如果可以的话,此 call 对我来说将非常有用:coordinates.sort(ComparatorForCoordinate(iCenter,jCenter));
最佳答案
您可以将状态添加到比较器:
struct ComparatorForCoordinate {
ComparatorForCoordinate(Coordinate center) : _center(center) {}
bool operator() (const shared_ptr<Coordinate>& c1, const shared_ptr<Coordinate>& c2) const {
return distance(c1, _center) > distance(c2, _center);
}
private:
Coordinate _center;
};
// sorting:
coordinates.sort(ComparatorForCoordinate(center));