鉴于以下内容
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值传递给比较函数?天真的尝试只是让操作员另外有两个双重参数的中心位置不起作用。如果它可以工作,这个电话对我来说会很棒:
coordinates.sort(ComparatorForCoordinate(iCenter,jCenter));
答案 0 :(得分:3)
您可以向比较器添加状态:
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));