#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]