我们说vector<People*> Population
与
class People {
string name;
string city;
int id;
};
我希望先按name
排序,然后按city
排序,例如:
Anna, Alabama, 1284
Anna, New York, 8377
Daniel, Sydney, 8332
Peter, Alabama, 6392
Peter, Munich, 5590
我想我会先按name
排序,然后在city
内按name
排序,然后转到下一个name
。
有没有更好的方法?
答案 0 :(得分:6)
您可以将自定义比较器传递给std::sort
:
std::sort(Population.begin(), Population.end(), [](People* a, People* b) {
if (a->name != b->name) return a->name < b->name;
return a->city < b->city;
});
答案 1 :(得分:2)
您可以使用std::tuple
的比较:
std::sort(Population.begin(), Population.end(),
[](auto& p1, auto& p2) {
return std::tie(p1->name, p1->city) < std::tie(p2->name, p2->city);
});
通过这种方式,您可以非常轻松地添加更多字段进行排序。