//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;
}