使用比较函数的额外参数对列表进行排序

时间:2017-01-24 06:37:47

标签: c++ sorting stl

鉴于以下内容

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

1 个答案:

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