不知道为啥书上(算法笔记)说的是不能用map会超时但是我的没有。。。
注意只能用cin>>s;方式读入字符串(?)
反正不能用scanf(“%s”,s);QAQ
iter->first指向键值 (在这里就是string)
iter->second指向数值 (在这里就是vector<int>)
使用for(auto j:m[name]) 遍历的时候大括号内的j不用加*(与另外一种方式区分一下)
#include<cstdio>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int n,k,ni,index;
string name;
scanf("%d %d",&n,&k);
map<string,vector<int>>m;
map<string,vector<int>>::iterator iter;
for(int i=0;i<k;i++){
scanf("%d %d",&index,&ni);
for(int j=0;j<ni;j++){
cin>>name;
m[name].push_back(index);
}
}
for (iter=m.begin();iter!=m.end();iter++){
sort(iter->second.begin(),iter->second.end());
}
for(int i=0;i<n;i++){
cin>>name;
if (m.find(name)==m.end()){
cout<<name<<" 0"<<endl;
}
else{
cout<<name<<" "<<m[name].size();
// for(auto j=m[name].begin();j!=m[name].end();j++){
// cout<<" "<<*j;
// }
for(auto j:m[name]){
cout<<" "<<j;
}
cout<<endl;
}
}
return 0;
}