题目:
输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
代码:
#include <iostream> #include <map> #include <cstring> #include <string> #include <vector> using namespace std; /* 收藏的原因:关于字符串转化为整数以及整数转为为字符串可见链接https://www.cnblogs.com/txltxl22/p/10540822.html */ void Func_1(map<int, vector<string> > mp, vector<string> &ans){ int i; string s; vector<string> vs; for(map<int, vector<string> >::iterator it=mp.begin(); it!=mp.end(); it++){ vs = it->second; for(i=0; i<vs.size(); i++){ s = vs[i] + ' ' + to_string(it->first); ans.push_back(s); } } } void Func_2(map<int, vector<string> > mp, vector<string> &ans){ int i; string s; vector<string> vs; for(map<int, vector<string> >::iterator it=mp.begin(); it!=mp.end(); it++){ vs = it->second; for(i=vs.size()-1; i>=0; i--){ s = vs[i] + ' ' + to_string(it->first); ans.insert(ans.begin(), s); } } } int main(){ int i, n, k, t; string s; vector<string> ans; map<int, vector<string> > mp; while(scanf("%d %d", &n, &k) != EOF){ ans.clear(); mp.clear(); for(i=0; i<n; i++){ cin>>s>>t; (mp[t]).push_back(s); } if(k == 1) Func_1(mp, ans); else Func_2(mp, ans); for(i=0; i<ans.size(); i++) printf("%s ", (ans[i]).c_str()); } return 0; }