成绩排序
思路:用algorithm的sort函数对键值对进行排序(需自定义比较函数,这里是我需要学习的),最后输出。
自定义的比较函数逻辑,比如比较整数s1和s2,如果要使s1小于s2时是真,则return s1<s2;使s1大于s2时是真,则return s1>s2。
#include<iostream> #include<string> #include<algorithm> using namespace std; struct student { string name; int score; int num; }; int cmp1(student &s1, student &s2) { if (s1.score == s2.score) return s1.num < s2.num; else return s1.score < s2.score; } int cmp0(student &s1, student &s2) { if (s1.score == s2.score) return s1.num < s2.num; else return s1.score > s2.score; } int main() { int count, method; while (cin >> count && cin >> method) { student *list = new student[count]; for (int i = 0; i < count; ++i) { cin >> list[i].name >> list[i].score; list[i].num = i; } //排序 if (method == 1)//升序 sort(list, list + count, cmp1); else//降序 sort(list, list + count, cmp0); for (int i = 0; i < count; ++i) cout << list[i].name << " " << list[i].score << endl; } system("pause"); return 0; }