题意:给定一组图书信息,查询与作者,出版社等等图书信息对应的图书,并升序输出这些图书的ID,图书ID必须是七位数字。
思路,设置一个map数组,键为图书信息,用一个string变量来保存,而值为对应的图书ID,用一个set容器来存储。这样形成键值对有利于节省图书的查询时间,否则,单纯地进行暴力搜索可能会超时。
代码如下:
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <cstdio>
using namespace std;
int n, m;
map<string, set<int> > info[5];
int main()
{
//freopen("in_1022.txt", "r", stdin);
cin >> n;
int ID;
for(int i = 0; i < n; i++)
{
cin >> ID;
getchar(); //接收一个回车符,因为getline遇回车符结束
for(int j = 0; j < 5; j++)
{
string temp;
getline(cin, temp);
if(j != 2) info[j][temp].insert(ID);
else
{
string str;
for(int k = 0; k < temp.size(); k++)
{
if(temp[k] == ' ')
{
info[2][str].insert(ID);
str.clear();
}
else str += temp[k];
if(k == temp.size() - 1) info[2][str].insert(ID);
}
}
}
}
cin >> m;
for(int i = 0; i < m; i++)
{
int index;
string str;
cin >> index;
getchar();getchar();
getline(cin, str);
cout << index << ": " << str << endl;
set<int> bookID = info[index - 1][str];
set<int>::iterator it;
for(it = bookID.begin(); it!=bookID.end(); it++)
printf("%07d\n", *it);
if(bookID.empty()) cout << "Not Found" << endl;
}
}