使用两个标准对对象进行排序

时间:2017-03-22 00:16:00

标签: c++ sorting vector

我们说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

有没有更好的方法?

2 个答案:

答案 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); 
    });

通过这种方式,您可以非常轻松地添加更多字段进行排序。