我不知道有任何类似于你比较的增强结构。
但是,boost::bind可以做到这一点。
Point leftmostPoint = *std::min_element(points.begin(), points.end(),
boost::bind(std::less<Point::type_x>(),
boost::bind( &Point::x, _1 ), boost::bind( &Point::x, _2 )));
是啊,那可不漂亮:/
幸运的是,有一个语法快捷方式可用,因为boost::bind生成的函数对象重载了许多常见的运算符,如<,所以您可以这样做:
Point leftmostPoint2 = *std::min_element(points.begin(), points.end(),
boost::bind( &Point::x, _1 ) < boost::bind( &Point::x, _2 ));
但我认为只有C++ 0x的lambda才能真正实现简洁。
和
清晰:
Point leftmostPoint3 = *std::min_element(points.begin(), points.end(),
[](const Point& p1, const Point& p2){ return p1.x < p2.x; });