pat甲1022 Digital Library

#include<iostream>
#include<map>
#include<set>
#include<cstring>
#include<cstdio>
using namespace std;
map<string,set<int>> book;//string到set的映射,实际上应该对每一类建一个映射
int main()
{
    int i,n,m;
    int id,type;
    string title,author,key,publisher,year;
    cin>>n;//n本图书
    for(i=0;i<n;i++)
    {
        cin>>id;//读入id
        char c=getchar();//读入换行符,避免干扰getline
        //book[id]
        getline(cin,title);//书名
        book[title].insert(id);//对应书名的集合加入id
        getline(cin,author);//作者
        book[author].insert(id);//对应作者的集合加入id
        while(cin>>key)//关键字处理,cin读入关键字
        {
            book[key].insert(id);//对应关键字集合加入id
            c=getchar();//读入空格或者换行符
            if(c=='\n')break;//如果为换行符则退出关键字处理
        }
        getline(cin,publisher);//读入出版社
        book[publisher].insert(id);//对应出版社集合加入id
        cin>>year;//读入年份
        book[year].insert(id);//对应年份集合加入id
    }
    string temp;
    cin>>m;
    for(i=0;i<m;i++)
    {
        scanf("%d: ",&type);//读入需要处理的类型
        //char c=getchar();
        getline(cin,temp);//读入字符串
        cout<<type<<": "<<temp<<endl;//输出
        //query(book,temp);
        string str=temp;
        if(book.find(str)==book.end())//按格式输出
        {

            cout<<"Not Found"<<endl;
        }
        else//找得到该字符串,则遍历该key对应的value集合,按7位输出id
        {
            for(set<int>::iterator it=book[str].begin();it!=book[str].end();it++)
            {
                printf("%07d\n",*it);
            }
        }
    }
    return 0;
}

发布了30 篇原创文章 · 获赞 0 · 访问量 1751

猜你喜欢

转载自blog.csdn.net/chang_sheng1/article/details/104096589
今日推荐