pat-1022 Digital Library

3338 단어 library
맵을 매핑할 수 있는 쿼리 ID 값
다음 코드에 문제가 있습니다. ID가 성형 저장이기 때문에 앞의 0을 무시합니다.

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



int main()
{
	int N;
	map<string,set<int>> m;
	int ID;
	int index;
	string title;
	string author;
	string keyword;
	string publisher;
	string year;
	int M;
	string query;

	cin>>N;

	while(N--)
	{
		cin>>ID;
		getchar();
		getline(cin,title);
		getline(cin,author);
		getline(cin,keyword);
		index=1;
		while(index!=string::npos)
		{
			index = keyword.find(" ");
			m["3: "+keyword.substr(0,index)].insert(ID);
			//cout<<keyword.substr(0,index)<<endl;
			keyword = keyword.substr(index+1);
		}
		getline(cin,publisher);
		getline(cin,year);
		m["1: "+title].insert(ID);
		m["2: "+author].insert(ID);
		m["4: "+publisher].insert(ID);
		m["5: "+year].insert(ID);

	}

	cin>>M;
	getchar();
	while(M--)
	{
		getline(cin,query);
		cout<<query<<endl;
		if(m.find(query)!=m.end())
		{
			for(set<int>::iterator si= m[query].begin(); si != m[query].end();si++)
				cout<<*si<<endl;
		}
		else
		{
			cout<<"Not Found"<<endl;
		}
	}
}





문자열로 ID 저장

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



int main()
{
	int N;
	map<string,set<string>> m;
	string ID;
	int index;
	string title;
	string author;
	string keyword;
	string publisher;
	string year;
	int M;
	string query;

	cin>>N;
	getchar();

	while(N--)
	{
		getline(cin,ID);
		getline(cin,title);
		getline(cin,author);
		getline(cin,keyword);
		index=1;
		while(index!=string::npos)
		{
			index = keyword.find(" ");
			m["3: "+keyword.substr(0,index)].insert(ID);
			//cout<<keyword.substr(0,index)<<endl;
			keyword = keyword.substr(index+1);
		}
		getline(cin,publisher);
		getline(cin,year);
		m["1: "+title].insert(ID);
		m["2: "+author].insert(ID);
		m["4: "+publisher].insert(ID);
		m["5: "+year].insert(ID);

	}

	cin>>M;
	getchar();
	while(M--)
	{
		getline(cin,query);
		cout<<query<<endl;
		if(m.find(query)!=m.end())
		{
			for(set<string>::iterator si= m[query].begin(); si != m[query].end();si++)
				cout<<*si<<endl;
		}
		else
		{
			cout<<"Not Found"<<endl;
		}
	}
}


좋은 웹페이지 즐겨찾기