带有额外参数的排序列表以进行比较功能

Sorting list with extra arguments to comparison function

本文关键字:比较 功能 列表 排序 参数      更新时间:2023-10-16

给定以下内容

class Coordinate {
  int i,j;
};
list<shared_ptr<Coordinate>> coordinates;

Coordinate只是我的代码真正包含的内容的更简单的版本。我想根据到给定坐标iCenter,jCenter的最小欧几里得距离对list进行排序。最接近此坐标的Coordinate应位于列表coordinates中的第一个位置。Furterhmore,我想使用以下结构

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。如何将这两个双精度值传递给比较函数?天真的尝试只是让操作员在中心位置额外有两个双精度参数是行不通的。如果这个电话有效,对我来说会很棒:

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