sort类对象数据成员最大到最小

时间:2013-12-21 01:15:04

标签: c++

我有一个名为Racecar的类,而Racecar中有40个vector个对象,每个对象都有一个名为myTotalPoints的数据成员。

在每场比赛和积分被授予之后,我想对所有对象进行排序' myTotalPoints数据成员从最大到最小,所以我可以在积分榜上显示它们。有谁知道我如何排序所有40个Racecar对象'数据成员?

3 个答案:

答案 0 :(得分:4)

您可以使用std::sort来解决此问题。

将二进制函数实现为sort函数中的第二个参数, 并且在二元函数中,根据两个myTotalPoints对象中Racecar的值之间的比较返回值。

根据指示,comp是:

  

二进制函数,接受范围中的两个元素作为参数,   并返回一个可转换为bool的值。返回的值表示   是否将作为第一个参数传递的元素视为去   它在第二个特定的严格弱顺序之前定义。该   函数不得修改其任何参数。这可以是一个   函数指针或函数对象。

答案 1 :(得分:3)

最简单,最简洁的方法是将std::sort()C++11 lambda一起使用:

std::sort(std::begin(racecars), std::end(racecars),
    [](Racecar const& a, Racecar const& b) {
    return b.myTotalPoints < a.myTotalPoints;   
    });

See an example run

答案 2 :(得分:1)

如果要按相反顺序对向量进行排序,请使用反向迭代器。

std::sort(racecars.rbegin(), racecars.rend());

如果您重载operator<,这将有效。

struct Racecar {
    int totalPoints;
    friend bool operator<(const Racecar& left, const Racecar& right);
};

bool operator<(const Racecar& left, const Racecar& right) {
    return left.totalPoints < right.totalPoints;
}

int main()
{
    std::vector<Racecar> cars;
    for (int i = 0; i < 20; i++)
        cars.push_back(Racecar{i});
    std::random_shuffle(cars.begin(), cars.end());
    std::sort(cars.rbegin(), cars.rend());
}