我有类Racecar
和40 Racecar
对象在vector
中,每个对象都有一个名为myTotalPoints
的数据成员。排序类对象数据成员最大到最小
在每次比赛和积分获得后,我想将所有对象的数据成员从最大到最小排序,以便我可以在积分榜上显示他们。有谁知道我可以如何排序所有40个对象的数据成员?
我有类Racecar
和40 Racecar
对象在vector
中,每个对象都有一个名为myTotalPoints
的数据成员。排序类对象数据成员最大到最小
在每次比赛和积分获得后,我想将所有对象的数据成员从最大到最小排序,以便我可以在积分榜上显示他们。有谁知道我可以如何排序所有40个对象的数据成员?
您可以使用std::sort
来解决此问题。
实现一个二进制函数是在sort
功能, 并且在二元函数返回基础上以两种Racecar
对象myTotalPoints
的值之间的比较的值的第二个参数。
作为指令去,comp
是:
二元函数。返回的值表示 作为第一个参数传递的元素是否会在第二个元素之前的 之前被指定为它所定义的特定严格弱排序。函数不得修改其任何参数。这可以是一个 函数指针或函数对象。
最简单和最简洁的方法是使用std::sort()
与C++11 lambda:
std::sort(std::begin(racecars), std::end(racecars),
[](Racecar const& a, Racecar const& b) {
return b.myTotalPoints < a.myTotalPoints;
});
@ r.v他已经在比较右侧和左侧,所以没关系。 – greatwolf
如果您想按相反顺序对您的矢量进行排序,请使用反向迭代器。
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());
}
你能说明这样的二进制函数可能是什么样子吗? –