#include <iostream> #include <algorithm> using namespace std; struct stu {//自定义结构体 string name; int grade; }; int descendCmp(stu a, stu b) { //注意,ab等值时不交换,在cmp返回时要去除==判断,否则报错 //此时如果两个元素相等,则都返回false -> 相当于不用交换 return a.grade > b.grade; } int ascendCmp(stu a, stu b) { return a.grade < b.grade; } int main() { int n, flag; while (cin >> n >> flag) { stu* student = new stu[n]; for (int i = 0; i < n; i++) { cin >> student[i].name >> student[i].grade; } switch (flag) { case 0: //stable_sort()使用归并,是稳定的;sort()使用快排,不满足稳定要求 stable_sort(student, student + n, descendCmp); break; case 1: stable_sort(student, student + n, ascendCmp); break; default: break; } for (int i = 0; i < n; i++) { cout << student[i].name << " " << student[i].grade<<endl; } delete []student; } return 0; }