重载比较符号“<”时,在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());这样的函数进行升序排序。

【讨论】:

谢谢,但是如果重载函数位于如上所示的类中,第一个参数是哪个? @vinllen this-&gt;_h 是左侧(第一)。所以你应该改变你的退货声明比较。

以上是关于重载比较符号“<”时,在C++中升序排序的正确方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

在 C++ 中重载比较运算符会导致“无效运算符<”

C++中怎样把两个升序数组合并

C语言 在文件中存放的均为40至60之间的正整数,要求统计每个正整数出现的次数,按次数升序排序并输出?

C++如何重载指针的比较符

C++中的()操作符重载及STL传递比较函数