std :: sort降序与运算符重载

use*_*652 2 c++ sorting std c++11

我有一个std::vector对象,我重载了<运算符.

我如何使用std::sort降序排序(无需编写我自己的Comparator)?

Bar*_*rry 7

你可以简单地调换参数std::less的帮助下std::bind:

using namespace std::placeholders;
std::sort(v.begin(), v.end(), std::bind(std::less<T>{}, _2, _1));
Run Code Online (Sandbox Code Playgroud)

但是我认为简单地编写等效的短lambda会更加清晰,即使它违背了不编写自己的Comparator的限制:

std::sort(v.begin(), v.end(), [](T const& lhs, T const& rhs) { return rhs < lhs; });
Run Code Online (Sandbox Code Playgroud)

  • @Barry Heh,好的电话,我认为确实存在,但不是那个名字:`std :: bind(std :: less <T>(),std :: placeholders :: _ 2,std :: placeholders :: _1)`.lambda违反OP规定的不创建自定义比较器的要求.`std :: bind`没有.然而,看到这个烂摊子,我希望OP有一个改变的心,无论如何都是为了lambda.:) (3认同)
  • @GuyGreer`std :: greater`使用`operator>`,而不是`operator <`.使用它的答案已发布并已删除.至于使用`not_fn`否定,那不会给你`!(a <b)`,这是逻辑上(当所有关系运算符明显过载时)`a> = b`,当你需要`a> b`时? (2认同)
  • 这看起来像UB:如果你排序`[1,1]`,两个比较都会产生`true`. (2认同)