//https://www.nowcoder.com/practice/3350d379a5d44054b219de7af6708894?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=&judgeStatus=&tags=&title=94&gioEnter=menu #include <iostream> #include <string> #include <map> #include <algorithm> #include <vector> using namespace std; struct person{ int index; int ticket; }; int cmp(const pair<string, struct person> &p1, const pair<string, struct person> &p2){ //'<'对pair操作符的重载是const return p1.second.index<p2.second.index; } int main() { int pnum = 0; int tnum = 0; string pstr; string tstr; int inv = 0; map<string, struct person> ans; struct person p = {0, 0}; vector<pair<string, struct person>> tans; cin >> pnum; for(int i = 0;i<pnum;i++){ cin >> pstr; p.index = i; ans.insert({{pstr, p}}); } cin >> tnum; for(int i = 0;i<tnum;i++){ cin >> tstr; if(ans.count(tstr)) ans[tstr].ticket++; else inv++; } for(const pair<string, struct person> &p:ans) tans.push_back(p); sort(tans.begin(), tans.end(), cmp); for(const pair<string, struct person> &p:tans) //不加const会报错,原因是map键值为const类型 cout << p.first << " : " << p.second.ticket <<endl; cout << "Invalid : " << inv <<endl; }