STL_A1022 Digital Library (30 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336

/*
*string,map,set的使用
*map<string,set<int> >
*把字符串string映射到元素均为int且有序的集合set
*/
#include<iostream>
using namespace std;
#include<cstdio>
#include<string>
#include<map>
#include<set>
set<int>::iterator it;
map<string,set<int> >mpTitle,mpAuthor,mpKey,mpPub,mpYear;

void query(map<string,set<int> >& mp,string& str) {
    if(mp.find(str)==mp.end()) printf("Not Found\n"); //注意换行,细节失败!
    else {
        for(it=mp[str].begin();it != mp[str].end();it++) {
            printf("%07d\n",*it); //输出str所对应的全部id
        }
    }
}
int main() { int n,m,id,type; string title,anthor,key,pub,year; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&id); char c; c=getchar(); getline(cin,title); mpTitle[title].insert(id); //把id加入title对应的集合 getline(cin,anthor); mpAuthor[anthor].insert(id); while(cin>>key) { //每次读入单个关键词key mpKey[key].insert(id); c=getchar(); //接收关键词key之后的字符 if(c=='\n') break; //遇到换行,直接跳出 } getline(cin,pub); mpPub[pub].insert(id); getline(cin,year); mpYear[year].insert(id); } string temp; scanf("%d",&m); //查询次数 for(int i=0;i<m;i++) { scanf("%d: ",&type); //注意输入格式 getline(cin,temp); cout<<type<<": "<<temp<<endl; if(type==1) query(mpTitle,temp); else if(type==2) query(mpAuthor,temp); else if(type==3) query(mpKey,temp); else if(type==4) query(mpPub,temp); else query(mpYear,temp); } return 0; }

转载于:https://www.cnblogs.com/2o2o/p/11369862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值