题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
#include <algorithm> #include <iostream> #include <vector> #include <utility> #include <string> using namespace std; typedef pair<string, int> ScoreRcd; bool AscendCmp(ScoreRcd p1, ScoreRcd p2); bool DescendCmp(ScoreRcd p1, ScoreRcd p2); int main() { int cnt = 0; cin >> cnt; if(cnt<1 || cnt>200) return -1; int mode = 0; cin >> mode; //mode =0 descend 1-ascend //vector<ScoreRcd > recvec; vector<ScoreRcd> recvec; string tempname; int tempscore; for(int i=0; i<cnt; i++) { cin >> tempname; cin >> tempscore; recvec.push_back(make_pair(tempname, tempscore)); //pair<string, int> temprcd = make_pair(tempname, tempscore); //recvec.push_back(); } if(mode == 0) { stable_sort(recvec.begin(), recvec.end(),DescendCmp); } else if(mode == 1) { stable_sort(recvec.begin(), recvec.end(), AscendCmp); } for(int i=0; i<cnt; i++) { cout << recvec[i].first << " "<<recvec[i].second <<endl; } return 0; } //数据结构:vector<pair<string, int> > scoretbl; //排序方式:两种:升序和降序 //额外要求:相同成绩按先录入排列在前,可以用泛型算法 stable_sort //排序算法:stable_sort() bool AscendCmp(ScoreRcd p1, ScoreRcd p2) { return p1.second < p2.second; } bool DescendCmp(ScoreRcd p1, ScoreRcd p2) { return p1.second > p2.second; }