1022. Digital Library (30)

来源:互联网 发布:nginx static 配置 编辑:程序博客网 时间:2024/05/29 02:15

    主要考虑散列表查找的应用。

#include <iostream>#include <cstdio>#include <vector>#include <unordered_map>#include <algorithm>using namespace std;vector<string> split(string str, string delimiter){vector<string> strs;size_t i = 0;while(true){auto pos = str.find(delimiter, i);strs.push_back(str.substr(i, pos-i));if(pos == string::npos) break;else i = pos+1;}return strs;}int main(){int n;scanf("%d", &n);cin.get();unordered_map<string, vector<string>> books[5];for(int i = 0; i < n; ++i){string id, title, author, words, publisher, year;getline(cin, id);getline(cin, title);getline(cin, author);getline(cin, words);getline(cin, publisher);getline(cin, year);if(books[0].find(title) == books[0].end()) books[0].insert({title, vector<string>()});books[0][title].push_back(id);if(books[1].find(author) == books[1].end()) books[1].insert({author, vector<string>()});books[1][author].push_back(id);auto strs = split(words, " ");for(auto& word : strs){if(books[2].find(word) == books[2].end()) books[2].insert({word, vector<string>()});books[2][word].push_back(id);}if(books[3].find(publisher) == books[3].end()) books[3].insert({publisher, vector<string>()});books[3][publisher].push_back(id);if(books[4].find(year) == books[4].end()) books[4].insert({year, vector<string>()});books[4][year].push_back(id);}int m;scanf("%d", &m);    cin.get();for(int i = 0; i < m; ++i){int cmd;string query;getline(cin, query);        cmd = query[0]-'0'-1;cout << query << endl;        query = query.substr(3);auto iter = books[cmd].find(query);if(iter == books[cmd].end()) printf("Not Found\n");else{            sort(begin(iter->second), end(iter->second));for(auto& str : iter->second){cout << str << endl;}}}return 0;}


0 0
原创粉丝点击