排序类对象数据成员从大到小

sort class objects data members greatest to least

本文关键字:从大到小 数据成员 对象 排序      更新时间:2023-10-16

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

在每场比赛和积分获得后,我想将所有对象的myTotalPoints数据成员从最大到最低进行排序,以便我可以在积分排名中显示它们。有谁知道如何对Racecar对象的所有 40 个数据成员进行排序?

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

实现二进制函数作为sort函数中的第二个参数,并在二进制函数中返回基于两个Racecar对象中myTotalPoints值之间的比较的值。

正如指令所说,comp是:

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

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

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

查看运行示例!

如果要

以相反的顺序对向量进行排序,请使用反向迭代器。

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());
}