使用的是map<string,vector<int>>要注意的是最后两个数组会出错如果直接输出int答案的话,需要在前面补齐0才行!!!(问题不是出在重复的书本编号上)
#include<map>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
map<string,vector<int>> q1,q2,q3,q4,q5;
map<string,vector<int>>::iterator iter;
int n,book,m,las=0,num;
string temp;
cin>>n;
for(int _=0;_<n;_++){
las=-1;
cin>>book;
getline(cin,temp);
getline(cin,temp);
q1[temp].push_back(book);
getline(cin,temp);
q2[temp].push_back(book);
getline(cin,temp);
for(int j=0;j<temp.size();j++){
if(temp[j]==' '){
q3[temp.substr(las+1,j-las-1)].push_back(book);
// printf("%d %d\n",las,j);
las=j;
}
}
// printf("%d\n",las);
q3[temp.substr(las+1,temp.size()-las-1)].push_back(book);
getline(cin,temp);
q4[temp].push_back(book);
getline(cin,temp);
q5[temp].push_back(book);
}
for(iter=q1.begin();iter!=q1.end();iter++)sort(iter->second.begin(),iter->second.end());
for(iter=q2.begin();iter!=q2.end();iter++)sort(iter->second.begin(),iter->second.end());
for(iter=q3.begin();iter!=q3.end();iter++)sort(iter->second.begin(),iter->second.end());
for(iter=q4.begin();iter!=q4.end();iter++)sort(iter->second.begin(),iter->second.end());
for(iter=q5.begin();iter!=q5.end();iter++)sort(iter->second.begin(),iter->second.end());
cin>>m;
for(int _=0;_<m;_++){
scanf("%d: ",&num);
getline(cin,temp);
cout<<num<<": "<<temp<<endl;
if (num==1){
if(q1[temp].empty())cout<<"Not Found"<<endl;
else{
for(auto i=q1[temp].begin();i!=q1[temp].end();i++){
if (i!=q1[temp].begin() && *i==*(i-1));
// else cout<<*i<<endl;
else printf("%07d\n",*i);
}
}
}
if (num==2){
if(q2[temp].empty())cout<<"Not Found"<<endl;
else{
for(auto i=q2[temp].begin();i!=q2[temp].end();i++){
if (i!=q2[temp].begin() && *i==*(i-1));
// else cout<<*i<<endl;
else printf("%07d\n",*i);
}
}
}
if (num==3){
if(q3[temp].empty())cout<<"Not Found"<<endl;
else{
for(auto i=q3[temp].begin();i!=q3[temp].end();i++){
if (i!=q3[temp].begin() && *i==*(i-1));
// else cout<<*i<<endl;
else printf("%07d\n",*i);
}
}
}
if (num==4){
if(q4[temp].empty())cout<<"Not Found"<<endl;
else{
for(auto i=q4[temp].begin();i!=q4[temp].end();i++){
if (i!=q4[temp].begin() && *i==*(i-1));
// else cout<<*i<<endl;
else printf("%07d\n",*i);
}
}
}
if (num==5){
if(q5[temp].empty())cout<<"Not Found"<<endl;
else{
for(auto i=q5[temp].begin();i!=q5[temp].end();i++){
if (i!=q5[temp].begin() && *i==*(i-1));
// else cout<<*i<<endl;
else printf("%07d\n",*i);
}
}
}
}
return 0;
}