- 题目:
A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID’s.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (≤104) which is the total number of books. Then N blocks follow, each contains the information of a book in 6 lines:
Line #1: the 7-digit ID number;
Line #2: the book title -- a string of no more than 80 characters;
Line #3: the author -- a string of no more than 80 characters;
Line #4: the key words -- each word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;
Line #5: the publisher -- a string of no more than 80 characters;
Line #6: the published year -- a 4-digit number which is in the range [1000, 3000].
It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.
After the book information, there is a line containing a positive integer M (≤1000) which is the number of user’s search queries. Then M lines follow, each in one of the formats shown below:
1: a book title
2: name of an author
3: a key word
4: name of a publisher
5: a 4-digit number representing the year
Output Specification:
For each query, first print the original query in a line, then output the resulting book ID’s in increasing order, each occupying a line. If no book is found, print Not Found instead.
-
题目大意
建立一个图书检索系统,可以按照姓名,书名,关键字,出版社,出版年份来检索书的ID,对于每一次检索,将书的ID按照从小到达的顺序输出 -
分析
1.建立string 到set 的映射,其中set中保存的为书的ID,分别建立5个set,分别为title, name, key, pub, year;
2.将每一次输入,将ID加入insert对应的set中 -
代码实现:
#include <iostream>
#include <map>
#include <string>
#include <set>
#include <cstdio>
using namespace std;
map<string, set<int> > title, name, key, pub, year;
void show(map<string, set<int>> &mp, string& index){ //输出map中set中的值
if(mp.find(index) == mp.end())
printf("Not Found\n");
else{
for(auto it = mp[index].begin(); it != mp[index].end(); it++){
printf("%07d\n", *it);
}
}
}
int main()
{
int N, query, id;
cin >> N;
string title1, name1, key1, pub1, year1;
for(int i = 0; i < N; i++){
scanf("%d", &id);
char c = getchar();
getline(cin, title1); //输入书名
title[title1].insert(id);
getline(cin, name1);
name[name1].insert(id);
while(cin >> key1){
key[key1].insert(id);
c = getchar();
if(c == '\n')
break;
}
getline(cin, pub1);
pub[pub1].insert(id);
getline(cin, year1);
year[year1].insert(id);
}
scanf("%d", &query);
for(int i = 0; i < query; i++){
int temp;
scanf("%d: ", &temp);
string str;
getline(cin, str);
cout << temp<<": " << str << endl;
if(temp == 1)
show(title, str);
else if(temp == 2)
show(name, str);
else if(temp == 3)
show(key, str);
else if(temp == 4)
show(pub, str);
else
show(year, str);
}
return 0;
}