如果您想根据您的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));
http://www.cplusplus.com/reference/algorithm/sort/ – 2013-05-14 18:26:54
拉姆达可能是您最好的选择。 – Joel 2013-05-14 18:36:04