ComparatorForCoordinate

ComparatorForCoordinate

鉴于以下

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));

10-08 04:38