排序类对象数据成员从大到小
sort class objects data members greatest to least
我有一个名为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());
}
相关文章:
- 为什么在浮点中从大到小会引入更多的误差
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 将私有数据成员添加到野牛生成的类中
- 从 XML 中读取未指定结构的每个数据成员
- 尝试将数据从C++发送到 Python 并使用套接字C++反转,C++ sendto() 和 python recvfr
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 派生类不从基类继承数据成员
- 从一个类的数据成员的值从另一个类更改
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 如何从大到小组织数组中的前 10 个常用值
- 从指针到基类成员的模板推导
- 排序类对象数据成员从大到小
- 设置和变大 否.的数据成员
- 数组和 For 循环:创建从大到小的数字列表
- C++数组从最大到最小的数字
- 重构来自/到一个数据成员的读写访问器
- 如何从QML到c++获取数据
- 如何移动数组中的元素,将奇数放到数组的开头(从最小到最大),甚至放到后面(从最大到最小)
- C++正在将文本文件读取到结构数据成员中
- 使用Std::vector::reserve时,Std::sort顺序从大到小