PAT1022 Digital Library(map,set)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37360631/article/details/88756484

分析:题目的要求就是建立一个一对多的映射,一个id对应多个属性,包括书名,作者,关键字,出版,年份。这里用到了map<int,set >进行存储。
(1)输入关键词,并没有给定关键词的个数,因此这里采用了一个技巧:

while(cin >> tkey) {
            key[tkey].insert(id);
            char c = getchar();
            if(c == '\n') break;
        }

**

(2)这里面一定要注意,在getline前面如果使用了cin读取一个数字,那么在cin的后面一定要加上getchar()读取掉换行符。

**
(3)这里传参必须要用引用的形式,否则最后一个测试点会超时。

#include<bits/stdc++.h>
using namespace std;
int n,m,id;
map<string,set<int> > title,author,key,pub,year;
string ti,au,tkey,pu,ye;
void query(map<string,set<int> > &mp,string &s){
    set<int>::iterator it;
    if(mp.find(s)!=mp.end()){
        for(it=mp[s].begin();it!=mp[s].end();++it){
            printf("%07d\n",*it);
        }
    }
    else{
        cout<<"Not Found"<<endl;
    }
}
int main(){
    //std::ios::sync_with_stdio(false);
    cin>>n;
    for(int i = 0; i < n; i++) {
        scanf("%d\n", &id);
        getline(cin, ti);
        title[ti].insert(id);
        getline(cin, au);
        author[au].insert(id);
        while(cin >> tkey) {
            key[tkey].insert(id);
            char c = getchar();
            if(c == '\n') break;
        }
        getline(cin, pu);
        pub[pu].insert(id);
        getline(cin, ye);
        year[ye].insert(id);
    }
//    for(int i=0;i<n;i++){
//        cin>>id;
//		  getchar();
//        getline(cin,ti);
//        title[ti].insert(id);
//
//        getline(cin,au);
//        author[au].insert(id);
//
//        while(cin>>tkey){
//            key[tkey].insert(id);
//            char c=getchar();
//            if(c=='\n') break;
//        }
//        getline(cin,pu);
//        pub[pu].insert(id);
//
//        getline(cin,ye);
//        year[ye].insert(id);
//    }
    cin>>m;
    int x;

    for(int i=0;i<m;i++){
        scanf("%d: ",&x);
        string s;
        getline(cin,s);
        cout<<x<<": "<<s<<endl;
        if(x==1){ query(title,s);}
        else if(x==2) {query(author,s);}
        else if(x==3) {query(key,s);}
        else if(x==4) {query(pub,s);}
        else if(x==5) {query(year,s);}
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/88756484