字符串以及map的传递速度较慢,如果需要作为函数的参数的话,需要尽可能加上引用
cin读入字符串是以空格或换行为截止标志的
getlin是换行读入(遇到空格或换行)
#include<bits/stdc++.h>
using namespace std;
map<string, set<int> > mpbook,mpau,mpkey,mppu,mpyear;
void find(map<string,set<int> >& mp,string& str)
{
if(mp.find(str)==mp.end())
printf("Not Found\n");
else
{
for(set<int>::iterator it=mp[str].begin();it!=mp[str].end();it++)
{
printf("%07d\n",*it);
}
}
}
int main()
{
int m;
int id;
string title,author,key,pub,year;
scanf("%d",&m);
while(m--)
{
scanf("%d",&id);
char c=getchar();
getline(cin,title);
mpbook[title].insert(id);
getline(cin,author);
mpau[author].insert(id);
while(cin>>key)
{
mpkey[key].insert(id);
c=getchar();
if(c=='\n')
break;
}
getline(cin,pub);
mppu[pub].insert(id);
getline(cin,year);
mpyear[year].insert(id);
}
string temp;
int n;
int type;
scanf("%d",&n);
while(n--)
{
scanf("%d: ",&type);
// getchar();
getline(cin,temp);
cout<<type<<": "<<temp<<endl;
if(type==1)
find(mpbook,temp);
else if(type==2)
find(mpau,temp);
else if(type==3)
find(mpkey,temp);
else if(type==4)
find(mppu,temp);
else
find(mpyear,temp);
}
return 0;
}