题解 | #成绩排序#
成绩排序
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;
}
查看6道真题和解析

