题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1?tpId=40&tqId=21333&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan&difficulty=&judgeStatus=&tags=/question-ranking
#include <algorithm> #include <functional> #include <iostream> #include <utility> #include <vector> using namespace std; class Student { public: int index; string name; int score; Student() = default; Student(int i, string n, int s): index(i), name(std::move(n)), score(s) {} }; int main() { int n, op; function<int(Student, Student)> desc = [](Student a, Student b) { if (a.score == b.score) return a.index < b.index; return a.score > b.score; }; function<int(Student, Student)> ndesc = [](Student a, Student b) { if (a.score == b.score) return a.index < b.index; return a.score < b.score; }; while (cin >> n) { vector<Student> arr; cin >> op; for (int i = 0; i < n; i++) { string name; int score; cin >> name >> score; arr.push_back(Student(i, name, score)); } if (op == 1) sort(arr.begin(), arr.end(), ndesc); else sort(arr.begin(), arr.end(), desc); for_each(arr.begin(), arr.end(), [](Student s) { cout << s.name << " " << s.score << endl; }); } } // 64 位输出请用 printf("%lld")