如果您想根据 LessA 比较器定义的关系进行排序,只需将 LessA 的实例作为第三个参数传递(并且,由于您使用的是 C++11,因此更喜欢全局 std::begin()和std::end()函数):
std::sort(std::begin(a), std::end(a), LessA());
// ^^^^^^^
现在,如果您的LessA() 表达了< 关系并且您想根据相反的标准进行排序,您可以这样做:
std::sort(std::begin(a), std::end(a),
[] (A const& a1, A const& a2))
{
return LessA()(a2, a1);
}
您可以做的另一件事是让您的自定义比较器接受一个参数来确定它应该如何执行比较:
class CompA {
bool lessThan;
public:
CompA(bool lessThan) : _lessThan(lessThan) { }
bool operator()(const A& a1, const A& a2) const {
if (_lessThan)
{
// return true iff a1 < a2;
}
else
{
// return true iff a1 > a2;
}
}
};
然后您可以使用这种方式按升序排序:
std::sort(std::begin(a), std::end(a), CompA(true));
而这种方式按降序排序:
std::sort(std::begin(a), std::end(a), CompA(false));
鉴于您原来的 LessA 比较器,另一种可能性是使用 std::bind 将参数的顺序交换到您的自定义比较器:
LessA comp;
using namespace std::placeholders;
std::sort(std::begin(v), std::end(v),
std::bind(&LessA::operator(), comp, _2, _1));