题目描述
分析:此题运用map可以很方便的解决,使用unordered_map或者map都可以,但是unordered_map由于是无序的查找速度更快,键值对中每个值采用set集合来存储
#include<map>
#include<cstdio>
#include<set>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
map<string,set<int>> title,author,key,publisher,year;
void query(map<string,set<int>> &mp,string &str){
if(mp.find(str)==mp.end()){
printf("Not Found\n");
}
else{
for(auto i=mp[str].begin();i!=mp[str].end();i++){
printf("%07d\n",*i);
}
}
}
int main(){
int n;
scanf("%d",&n);
string str;
while(n--){
int id;
scanf("%d",&id);
getchar();
getline(cin,str);
title[str].insert(id);
getline(cin,str);
author[str].insert(id);
while(cin>>str){
key[str].insert(id);
char c=getchar();
if(c=='\n'){
break;
}
}
getline(cin,str);
publisher[str].insert(id);
getline(cin,str);
year[str].insert(id);
}
scanf("%d",&n);
while(n--){
int m;
scanf("%d: ",&m);
getline(cin,str);
printf("%d: %s\n",m,str.c_str());
if(m==1){
query(title,str);
}
else if(m==2){
query(author,str);
}
else if(m==3){
query(key,str);
}
else if(m==4){
query(publisher,str);
}
else if(m==5){
query(year,str);
}
}
return 0;
}