我有類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());
}
你能說明這樣的二進制函數可能是什麼樣子嗎? –