问题描述:给定每本书的id、书名、作者、关键字、出版社、出版日期,然后按照书名、作者、关键字、出版社、出版日期进行查询,输出相应书籍的id。
解题思路:根据查询的内容将将书籍id储存到不同的集合。用unordered_map<query,vector<id> >title、author的结构。则可直接根据名字得到书籍的集合,排序输出即可。
AC代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<unordered_map>
#include<set>
#include<string>
using namespace std;
unordered_map<string, set<int>>query[6];
int main()
{
freopen("test.txt", "r", stdin);//命名test时不加txt。test.txt与main.cpp同一目录下。
int N;
scanf("%d", &N);
while (N--) {
int id;
string str;
char c;
scanf("%d", &id);
c = getchar();
getline(cin, str);//书名
query[1][str].insert(id);
getline(cin, str);//作者
query[2][str].insert(id);
while (cin >> str) {
query[3][str].insert(id);
c = getchar();
if (c == '\n')break;
}
getline(cin, str);//出版社
query[4][str].insert(id);
getline(cin, str);//日期
query[5][str].insert(id);
}
scanf("%d", &N);
while (N--) {
int i;
string str;
scanf("%d: ", &i);
getline(cin, str);
cout << i << ": " << str << "\n";
if (query[i][str].size()) {
set<int>::iterator it = query[i][str].begin();
while (it != query[i][str].end()) {
printf("%07d\n", *it);
++it;
}
}
else printf("Not Found\n");
}
return 0;
}