A1022 Digital Library (30分)
一、技术总结
- 首先这是一个map,STL类型的题目,前面的一个问题是存储,首先可能会想到的是,把每个信息存储下来然后通过输入想要查询的方式进行查询。可是,如果这里会发现,是通过关键词然后查询输出,相关book的id号。这个样其实就可以使用map,把相关的关键词作为一个string,然后id使用一个set容器进行存储。
- 所以存储的形式就是map<string, set
> - 还有一点需要注意的是,查询函数query(),参数注意要使用引用,不然会有超时。
- 还有就是在输入一行中的单个字符串的时候,包括空格,应该怎么处理:
while(cin >> str){
tkey[str].insert(id);
char c = getchar();
if(c == '\n') break;
}
二、参考代码
#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;
map<string, set<int> > ttitle, tkey, tauthor, tpub, tyear;
void query(map<string, set<int> > &m, string &str){
if(m.find(str) != m.end()){
for(auto it = m[str].begin(); it != m[str].end(); it++){
printf("%07d\n", *it);
}
}else{
printf("Not Found\n");
}
}
int main(){
int n, m, id, num;
scanf("%d", &n);
string title, key, author, pub, year;
for(int i = 0; i < n; i++){
scanf("%d\n", &id);
getline(cin, title);
ttitle[title].insert(id);
getline(cin, author);
tauthor[author].insert(id);
while(cin >> key){
tkey[key].insert(id);
char c = getchar();
if(c == '\n') break;
}
getline(cin, pub);
tpub[pub].insert(id);
getline(cin, year);
tyear[year].insert(id);
}
scanf("%d", &m);
for(int i = 0; i < m; i++){
scanf("%d: ", &num);
string temp;
getline(cin, temp);
cout << num << ": " << temp << "\n";
if(num == 1) query(ttitle, temp);
else if(num == 2) query(tauthor, temp);
else if(num == 3) query(tkey, temp);
else if(num == 4) query(tpub, temp);
else if(num == 5) query(tyear, temp);
}
return 0;
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.