我有一个名为Racecar
的类,而Racecar
中有40个vector
个对象,每个对象都有一个名为myTotalPoints
的数据成员。
在每场比赛和积分被授予之后,我想对所有对象进行排序' myTotalPoints
数据成员从最大到最小,所以我可以在积分榜上显示它们。有谁知道我如何排序所有40个Racecar
对象'数据成员?
答案 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;
});
答案 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());
}