重载比较符号“<”时,在C++中升序排序的正确方法是啥
Posted
技术标签:
【中文标题】重载比较符号“<”时,在C++中升序排序的正确方法是啥【英文标题】:what is right way to sort in ascending in C++ when overloading comparative symbol "<"重载比较符号“<”时,在C++中升序排序的正确方法是什么 【发布时间】:2016-12-09 13:32:50 【问题描述】:我想对元素类型为自己在下面代码中定义的类的向量进行排序。
struct Node
int _x;
int _y;
int _h;
Node(int x, int y, int h) : _x(x), _y(y), _h(h)
bool operator<(const Node &p) const
return _h > p._h; // > or <
;
vector<Node> v; //priority_queue<Node> p;
...//push some objects
sort(v.begin(), v.end());
很奇怪,有时我在重载函数中使用“return _h > p._h”来获取升序,但有时却是降序。可能不在向量中,而是在其他使用比较函数的日期结构中,例如priority_queue、map等
有没有详细的文档介绍比较功能?
解决了。我觉得我记性不好。
【问题讨论】:
en.cppreference.com/w/cpp/algorithm/sort 您能举一个例子,说明您“可能有时”会收到不同的订单吗? @tobi303 抱歉,我忘记了,但我确定我多次遇到排序问题 看来我犯了一个愚蠢的错误 【参考方案1】:http://en.cppreference.com/w/cpp/algorithm/sort
比较函数对象(即满足 比较的要求),如果第一个参数是,返回真 小于(即先于)第二个。
使用sort(v.begin(), v.end());
这样的函数进行升序排序。
【讨论】:
谢谢,但是如果重载函数位于如上所示的类中,第一个参数是哪个? @vinllenthis->_h
是左侧(第一)。所以你应该改变你的退货声明比较。以上是关于重载比较符号“<”时,在C++中升序排序的正确方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)