1 #include <iostream>
2 #include <sstream>
3 #include <string>
4 #include <vector>
5 #include <map>
6 #include <fstream>
7 #include <algorithm>
8 #include <iomanip>
9 using namespace std;
10 //利用map键的唯一性
11 //建立key为关键词,value为id的map
12
13 map<string, vector<int>> name;
14 map<string, vector<int>> author;
15 map<string, vector<int>> keyWord;
16 map<string, vector<int>> press;
17 map<string, vector<int>> year;//对出版年同样做string对待
18
19 int main(void)
20 {
21 //ifstream fin("data.txt");
22
23 int num, bookID;
24 cin>>num;
25 string temp, nameTemp, authorTemp, keyWordLine,
26 keyWordTemp, pressTemp, yearTemp;
27 for(int i=0; i<num; i++)
28 {
29 cin>>bookID;
30 getline(cin, temp);//这里多余的输入去掉回车符
31 getline(cin, nameTemp);
32 name[nameTemp].push_back(bookID);
33 //map下标操作:
34 //1.如果存在key,则返回对应的value
35 //2.如果key不存在,插入key
36
37 getline(cin, authorTemp);
38 author[authorTemp].push_back(bookID);
39
40 //输入一行字符串并且逐个分解单词
41 getline(cin, keyWordLine);
42 istringstream stream(keyWordLine);
43 while(stream >> keyWordTemp)
44 keyWord[keyWordTemp].push_back(bookID);
45
46 getline(cin, pressTemp);
47 press[pressTemp].push_back(bookID);
48
49 getline(cin, yearTemp);
50 year[yearTemp].push_back(bookID);
51 }
52
53 int queryNum;
54 cin>>queryNum;
55 string query;
56 getline(cin, temp);//同样去掉整型后面的回车符
57
58 for(int i=0; i<queryNum; i++)
59 {
60 getline(cin, query);
61 string queryText(query.begin()+3, query.end());//拷贝关键词
62 map<string, vector<int>>::iterator it = name.find(queryText);
63 if(it != name.end())//关键词存在
64 {
65 cout<<query<<endl;
66 sort(it->second.begin(), it->second.end());//按id顺序
67 for(int j=0; j<it->second.size(); j++)
68 cout<<setfill('0')<<setw(7)<<it->second[j]<<endl;
69 continue;//按照题意,关键词是name keyword author等中的一种
70 //查询到则进行下一次查询
71 }
72
73 it = author.find(queryText);
74 if(it != author.end())
75 {
76 cout<<query<<endl;
77 sort(it->second.begin(), it->second.end());
78 for(int j=0; j<it->second.size(); j++)
79 cout<<setfill('0')<<setw(7)<<it->second[j]<<endl;
80 continue;
81 }
82
83 it = keyWord.find(queryText);
84 if(it != keyWord.end())
85 {
86 cout<<query<<endl;
87 sort(it->second.begin(), it->second.end());
88 for(int j=0; j<it->second.size(); j++)
89 cout<<setfill('0')<<setw(7)<<it->second[j]<<endl;
90 continue;
91 }
92
93 it = press.find(queryText);
94 if(it != press.end())
95 {
96 cout<<query<<endl;
97 sort(it->second.begin(), it->second.end());
98 for(int j=0; j<it->second.size(); j++)
99 cout<<setfill('0')<<setw(7)<<it->second[j]<<endl;
100 continue;
101 }
102
103 it = year.find(queryText);
104 if(it != year.end())
105 {
106 cout<<query<<endl;
107 sort(it->second.begin(), it->second.end());
108 for(int j=0; j<it->second.size(); j++)
109 cout<<setfill('0')<<setw(7)<<it->second[j]<<endl;
110 continue;
111 }
112
113 //未找到
114 cout<<query<<endl<<"Not Found"<<endl;
115 }
116
117 return 0;
118 }