Я новичок в Boost, но не в функциональном программировании, и я пытаюсь понять, где Boost может мне помочь.Как создать компаратор с Boost?
У меня есть список двумерных точек, и я хочу извлечь минимальную координату x
. Point
класс имеет функцию члена float x() const
так что я могу использовать boost::mem_fn
следующим образом:
boost::mem_fn(&Point::x)
Но для того, чтобы использовать std::min_element
, мне нужен объект, который поддерживает bool operator()(Point const &, Point const &)
. Что-то вроде этого вымышленного compare_by
:
leftmostPoint = std::min_element(
points.begin(), points.end(),
boost::compare_by(boost::mem_fn(&Point::x)));
Могу ли я использовать подталкивание построить такое сравнение, или же мне нужно сделать это сам?
Обновление: Вот моя собственная реализация, но мне все же интересно узнать, как Boost мог это сделать для меня.
template<typename F>
class CompareBy {
F const d_f;
public:
CompareBy(F f) : d_f(f) { }
template<typename T>
bool operator()(T const &a, T const &b) const {
return d_f(a) < d_f(b);
}
};
template<typename F>
CompareBy<F> compare_by(F f) {
return CompareBy<F>(f);
}
Использование: как указано выше, за вычетом boost::
пространства имен.
Я думаю, что lamba нужен тип логического возврата, т. Е. '[] (Const Point & p1, const Point & p2) -> bool'. – mavam