Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::使用运算符重载按降序排序_C++_Sorting_C++11_Std - Fatal编程技术网

C++ std::使用运算符重载按降序排序

C++ std::使用运算符重载按降序排序,c++,sorting,c++11,std,C++,Sorting,C++11,Std,我有一个对象的std::vector,我为其重载了,您可以借助std::bind,简单地将参数转换为std::less: using namespace std::placeholders; std::sort(v.begin(), v.end(), std::bind(std::less<T>{}, _2, _1)); 使用名称空间std::占位符; 排序(v.begin(),v.end(),std::bind(std::less{},_2,_1)); 但我认为简单地编写等效的

我有一个对象的
std::vector
,我为其重载了
,您可以借助
std::bind
,简单地将参数转换为
std::less

using namespace std::placeholders;
std::sort(v.begin(), v.end(), std::bind(std::less<T>{}, _2, _1));
使用名称空间std::占位符;
排序(v.begin(),v.end(),std::bind(std::less{},_2,_1));
但我认为简单地编写等效的短lambda会更简洁,即使它违背了不编写自己的比较器的约束:

std::sort(v.begin(), v.end(), [](T const& lhs, T const& rhs) { return rhs < lhs; });
排序(v.begin(),v.end(),[](T const&lhs,T const&rhs){return rhs
您可以使用
std::sort
对数组进行排序,然后使用
std::reverse
将其反转。这将按您想要的方式排序

std::sort(v.begin(), v.end());
std::reverse(v.begin(), v.end());

std::排序(开始(v)、结束(v)、std::更大)
std::sort(v.rbegin(),v.rend())从C++14开始,比较函数有一个专门化,通过传递
void
作为模板参数来实现。同时,如果未指定任何模板参数,则标准使
void
成为默认模板参数。语法
std::greater
用默认值实例化对象arguments@GuyGreer但是该对象仍然需要实例化,即,
std::greater()
甚至
std::greater
,而
std::greater
not2(std::less)
不同,我很确定他们在排序时会给出相同的结果…@GuyGreer
std::greer
使用
操作符>
,而不是
operator@Barry嘿,这是一个很好的调用,我认为它确实存在,尽管不是这个名字:
std::bind(std::less(),std::placeholders:::_2,std::placeholders::_1)
。lambda违背了OP声明的不创建自定义比较器的要求<代码>标准::绑定
没有。然而,看到这种混乱局面,我希望OP能改变主意,不管怎样,还是选择lambda这看起来像UB:如果对
[1,1]
进行排序,两个比较都将生成
true
std::sort(v.begin(), v.end());
std::reverse(v.begin(), v.end());