C++ 的 std::sort 函數和 lambda 表達式可以用來對多字段進行排序。
假設我們有一個存儲學生信息的結構體 Student,其中包含學生的姓名、年齡和成績:
struct Student {
std::string name;
int age;
double score;
};
我們可以使用 std::sort 對這個結構體數組進行排序。假設我們需要首先按照分數降序排序,如果分數相同則按照年齡升序排序,如果年齡也相同則按照姓名字典序排序:
#include <algorithm>
#include <iostream>
#include <vector>
struct Student {
std::string name;
int age;
double score;
};
int main() {
std::vector<Student> students = {
{"Alice", 20, 85.5},
{"Bob", 22, 90.0},
{"Alice", 18, 85.5},
{"Bob", 22, 85.5}
};
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
if (a.score != b.score) {
return a.score > b.score;
} else if (a.age != b.age) {
return a.age < b.age;
} else {
return a.name < b.name;
}
});
for (const auto& student : students) {
std::cout << student.name << " " << student.age << " " << student.score << std::endl;
}
return 0;
}
在 lambda 表達式中我們定義了一個比較函數,根據分數、年齡和姓名的順序進行排序。通過 std::sort 將學生數組按照要求排序后,我們可以輸出排序后的結果。