【发布时间】:2020-11-22 11:24:27
【问题描述】:
我正在尝试对类指针向量vector <Building*> company 进行排序。下面是我的代码
sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
{
return (lhs->getCompanyName() > rhs->getCompanyName() && lhs->height() > rhs->height());
});
我正在尝试根据名为getCompanyName() 和height() 的类中的两个属性进行排序。 getCompanyName 按字母顺序从 A 到 Z 排序,height 按降序排序。
上述排序不起作用。
但是,如果我将这两个条件分成以下两个:
sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
{
return lhs->getCompanyName() > rhs->getCompanyName();
});
sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
{
return lhs->height() > rhs->height();
});
向量将正确排序,但仅基于一个属性。
我的 2 属性排序代码有问题吗?
编辑:
getCompanyName() 将首先按 A-Z 排序。
只有在getCompanyName() 排序后,height() 才会按降序排序。
排序后的预期输出示例:
Company Name: AQA
Height: 300
Company Name: AFE
Height: 200
Company Name: BAC
Height: 600
Company Name: BFE
Height: 100
Company Name: CJE
Height: 1200
【问题讨论】:
-
您如何定义用于排序的顺序?例如,哪个应该更早,
getCompanyName = aaa, height = 100或getCompanyName = bbb, height = 200? -
@MikeCAT 谢谢,我已进一步编辑我的帖子以澄清您的观点。
-
您的比较不满足严格弱排序的要求,因此您的程序表现出未定义的行为。尤其是比较得出的等价关系是不传递的:
{"b", 3}等价于{"c", 1},等价于{"a", 2},但{"b", 3}不等价于{"a", 2}。
标签: c++ sorting c++11 conditional-statements