解题思路:
(1)自定义排序
#include<iostream>
#include<map>
#include<vector>
using namespace std;
struct comp1 {
bool operator () (const pair<int,int> &a,const pair<int,int> &b) {
if(a.first<b.first) return true;
else if(a.first>b.first) return false;
else if(a.second<b.second) return true;
else return false;
}
};
struct comp2 {
bool operator () (const pair<int,int> &a,const pair<int,int> &b) {
if(a.first<b.first) return false;
else if(a.first>b.first) return true;
else if(a.second<b.second) return true;
else return false;
}
};
int main() {
int n,k;
string s;
int score;
while(cin>>n) {
cin>>k;
map<pair<int,int>,string,comp1> mp1;
map<pair<int,int>,string,comp2> mp2;
for(int i=0;i<n;i++) {
cin>>s;
cin>>score;
if(k==1) mp1[{score,i}]=s;
else mp2[{score,i}]=s;
}
if(k==1) {
for(auto it=mp1.begin();it!=mp1.end();it++) {
cout<<it->second<<" "<<it->first.first<<endl;
}
} else {
for(auto it=mp2.begin();it!=mp2.end();it++) {
cout<<it->second<<" "<<it->first.first<<endl;
}
}
}
return 0;
}