方法:利用map<string,set<int> >容器
注意点:输出格式%07d
#include <iostream>
#include <map>
#include <string>
#include <set>
using namespace std;
map<string,set<int> > title,author,publisher,year,keyword;
void query(map<string,set<int> > &mp,string &s){ //
if(mp.find(s)!=mp.end()){
for(set<int>::iterator it=mp[s].begin();it!=mp[s].end();it++){
printf("%07d\n",*it);
}
}else printf("Not Found\n");
}
int main(){
freopen("g:\\in.txt","r",stdin);
int num,id,M;
scanf("%d",&num);
string temp,s;
for(int i=0;i<num;i++){
scanf("%d",&id);
getchar(); //
getline(cin,temp);
title[temp].insert(id);
getline(cin,temp);
author[temp].insert(id);
getline(cin,temp);
int initial=0;
for(int i=0;i<temp.size();i++){
if(temp[i]==' '){
s=temp.substr(initial,i-initial);
keyword[s].insert(id);
initial=i+1;
}else if(i==temp.size()-1){
s=temp.substr(initial,i-initial+1);
keyword[s].insert(id);
}
}
getline(cin,temp);
publisher[temp].insert(id);
getline(cin,temp);
year[temp].insert(id);
}
scanf("%d",&M);
getchar(); //
for(int i=0;i<M;i++){
getline(cin,temp);
cout<<temp<<endl;
int len=temp.size()-3,lens;
s=temp.substr(3,len);
if(temp[0]=='1') query(title,s);
else if(temp[0]=='2') query(author,s);
else if(temp[0]=='3') query(keyword,s);
else if(temp[0]=='4') query(publisher,s);
else if(temp[0]=='5') query(year,s);
}
return 0;
}