一个常见的应用案例是在处理需要稳定排序的数据结构中,如有序的关联容器(如std::map)或者需要保持原有元素顺序的容器(如std::vector)。
例如,我们有一个存储学生信息的结构体Student,其中包含学生的姓名和分数。我们需要按照学生的分数进行排序,但是在分数相同时需要保持原有的顺序。这时就可以使用stable_sort来实现稳定排序。
#include <iostream>
#include <vector>
#include <algorithm>
struct Student {
std::string name;
int score;
};
bool compare(const Student& s1, const Student& s2) {
return s1.score < s2.score;
}
int main() {
std::vector<Student> students = {
{"Alice", 85},
{"Bob", 92},
{"Cathy", 85},
{"David", 78}
};
// 使用stable_sort按照学生的分数进行排序
std::stable_sort(students.begin(), students.end(), compare);
// 输出排序后的结果
for (const auto& student : students) {
std::cout << student.name << " " << student.score << std::endl;
}
return 0;
}
在上面的例子中,我们使用stable_sort对学生信息按照分数进行排序,并且在分数相同时保持原有的顺序。这样就可以确保相同分数的学生在排序后仍然按照其在原有顺序出现的顺序排列。