(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_ < rhs.age_ && lhs.name_ < rhs.name_;
在lhs.age_ == rhs.age_
时做了什么。问问自己在这种情况下lhs.age_ < 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_ < rhs.age_
将始终为假,如果年龄相同,您的比较器将返回假。
【讨论】:
以上是关于(C++) sort() 中第三个参数的决策结构的主要内容,如果未能解决你的问题,请参考以下文章
C++中有专门给对象数组排序的类方法吗,就像Java中的sort