#include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; //主要在于维持排序稳定 typedef struct Student { string name; int number; double score; }; bool cmp1(const Student & s1,const Student & s2)//降序,排序稳定 { if(s1.score == s2.score)//分数相同,维持两元素的相对位置不变 return s1.number < s2.number; else return s1.score > s2.score; } bool cmp2(const Student & s1,const Student & s2)//升序 { if(s1.score == s2.score) return s1.number < s2.number; else return s1.score < s2.score; } int main(void) { int m; vector<Student> arr; while(cin >> m) { arr.clear(); int c; cin >> c; int i = 0;//记录学生在原case中的位置 while(m--)//输入学生信息 { Student s; cin >> s.name >> s.score; s.number = i; i++; arr.push_back(s); } if(c == 0)//选择排序方法 sort(arr.begin(),arr.end(),cmp1); else sort(arr.begin(), arr.end(),cmp2); for(vector<Student>::iterator it = arr.begin();it != arr.end();it++) cout << it->name << ' ' << it->score << endl; } return 0; }