Day 39 算法笔记之STL 6.3 map的常用用法详解(2)

string 映射到一个 int型的集合,巧妙

#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;

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;
	scanf("%d",&n);
	int id;
	string title,author,key,pub,year;
	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);
	}
	
	int m;
	scanf("%d",&m);
	int type;
	string temp;
	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);
	}
	

	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121294866