熟练运用set和map有奇效;
最主要的目光应该聚焦在输入上;
当出现多个同一行输入的字符串是,如果要使用string录入,可以采取如下方式,其中使用getchar来得到换行符,从而标志输入是否结束:
while(cin>>key){
mpKey[key].insert(id);
c=getchar();
if(c=='\n')
break;
}
全部代码如下所示:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<set>
#include<string>
#include<map>
using namespace std;
using std::map;
using std::set;
map<string,set<int> >mpTitle,mpAuthor,mpKey,mpPub,mpYear;
void query(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 n,m,id,type;
string title,author,key,pub,year;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&id);
char c=getchar();
getline(cin,title);
mpTitle[title].insert(id);
getline(cin,author);
mpAuthor[author].insert(id);
while(cin>>key){
mpKey[key].insert(id);
c=getchar();
if(c=='\n')
break;
}
getline(cin,pub);
mpPub[pub].insert(id);
getline(cin,year);
mpYear[year].insert(id);
}
string temp;
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d: ",&type);
getline(cin,temp);
cout<<type<<": "<<temp<<endl;
if(type==1)
query(mpTitle,temp);
else if(type==2)
query(mpAuthor,temp);
else if(type==3)
query(mpKey,temp);
else if(type==4)
query(mpPub,temp);
else
query(mpYear,temp);
}
system("pause");
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。