如果您想根据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));