#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> v;
unordered_map<string,set<int>> hash;
hash.clear();
for(int i=0;i<n;i++){
int m;
cin>>m;
for(int j=0;j<m;j++){
string s;
cin>>s;
hash[s].insert(i+1);
}
}
int m;
cin>>m;
while(m--){
string s;
cin>>s;
if(hash.find(s)!=hash.end()){
for(auto it=hash[s].begin();it!=hash[s].end();it++){
cout<<*it<<" ";
}
}
cout<<"\n";
}
}
题目含义:有多篇文档,每篇有一些单词;
现给某个单词,请问它所在文档的序号(1,2,3,……)
解题思路:每篇文档的序数与单词是对应关系
求解时是根据单词找对应序数;
很容易联想到哈希表的 键值对,
由于是给单词(单个)找序数(多个)
所以单词是键,序数是值
(由于序数的值很多所以用vector,或者set。由于本题只要求“输出所在的序号”,所以用set)
(注意:vector可以塞入重复的数,set的数是单一的)
false的space:set<int> s的遍历
for(auto it = s.begin(); it != s.end();++it){ cout <<*it <<" ";}
注意:s不可以s[1]……s[100]



京公网安备 11010502036488号