(C++) sort() 中第三个参数的决策结构

Posted

技术标签:

【中文标题】(C++) sort() 中第三个参数的决策结构【英文标题】:(C++) Decision structure for third parameter in sort() 【发布时间】:2017-03-24 19:53:33 【问题描述】:

我正在研究一个问题的简单解决方案,我想对通过以下方式定义的对象向量进行排序:

class Person 
  public:
    string name_;
    double age_;
;

我正在尝试修改 sort() 的第三个参数,以便可以按年龄对向量进行排序,但是当两个年龄相同时,它将在该年龄内按字母顺序对它们进行排序。

vector<Person> people;
//code to populate vector
sort(people.begin(), people.end(), sort_decision);

我不确定是否可以在我拥有的 sort_decision 代码中添加决策结构,大致如下:

inline bool sort_decision(Person const& lhs, Person const& rhs) 
    if (lhs.age_ == rhs.age_)
        return lhs.age_ < rhs.age_ && lhs.name_ < rhs.name_;
    else
        return lhs.age_> rhs.age_;

感谢您的帮助。

【问题讨论】:

想想return lhs.age_ &lt; rhs.age_ &amp;&amp; lhs.name_ &lt; rhs.name_;lhs.age_ == rhs.age_ 时做了什么。问问自己在这种情况下lhs.age_ &lt; rhs.age_ 的结果是什么。 【参考方案1】:

排序决定应该是这样的

inline bool sort_decision(Person const& lhs, Person const& rhs) 
    if (lhs.age_ == rhs.age_)
        lhs.name_ < rhs.name_;
    else
        return lhs.age_> rhs.age_;

因为如果if (lhs.age_ == rhs.age_) 为真,return lhs.age_ &lt; rhs.age_ 将始终为假,如果年龄相同,您的比较器将返回假。

【讨论】:

以上是关于(C++) sort() 中第三个参数的决策结构的主要内容,如果未能解决你的问题,请参考以下文章

C++中有专门给对象数组排序的类方法吗,就像Java中的sort

1806最大数 string和sort函数用法

c++ sort 函数能对类或者结构体进行排序吗

题解 P1068 分数线划定

C++ STL 中是不是有任何数据结构用于执行 log(n) 中第 k 个元素的插入、搜索和检索?

Vector容器 二维数组sort()排序