PAT:1022. Digital Library (30) (部分正确,错最后两个)

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<map>
 4 #include<string>
 5 #include<set>
 6 #include<iostream>
 7 using namespace std;
 8 int n;        //n本书
 9 //标题、作者、关键字、出版社、出版年份与ID的映射
10 map<string,set<int>> mpTITLE,mpAUTHOR,mpKEY,mpPUBLISHER,mpYEAR;
11 
12 void query(map<string,set<int>> &m,string Q)    //【skill】“&m”的引用符号是为了加快处理速度
13 {
14     if(m.find(Q)==m.end())
15         printf("Not Found\n");
16     else
17         for(set<int>::iterator it=m[Q].begin() ; it!=m[Q].end() ; ++it)    //【思维】m已经选好了是作者还是出版社之类的,it只要扫描这个类的set,按个输出就可以了
18             printf("%d\n",*it);                //【skill】it所指向的内容
19 }
20 
21 int main()
22 {
23     scanf("%d",&n);
24     int ID=-1;
25     string title,author,key,publisher,year;
26     for(int i=0 ; i<n ; ++i)
27     {
28         scanf("%d",&ID);
29         char c=getchar();            //【caution】吸收换行符
30         getline(cin,title);            //输入标题
31         mpTITLE[title].insert(ID);
32         getline(cin,author);
33         mpAUTHOR[author].insert(ID);
34         while(cin>>key)                //【skill】持续输入关键字的方法,cin也是按空格划分的
35         {
36             mpKEY[key].insert(ID);
37             char d=getchar();        //【skill】取后面的字符,是空格,则还有key,是“\n则输入结束,break”
38             if(d=='\n')
39                 break;
40         }
41         getline(cin,publisher);
42         mpPUBLISHER[publisher].insert(ID);
43         getline(cin,year);
44         mpYEAR[year].insert(ID);
45     }
46     int q,num;
47     scanf("%d",&q);
48     for(int i=0 ; i<q ; ++i)
49     {
50         scanf("%d: ",&num);        //看看这样可否
51         string Q;
52         getline(cin,Q);
53         printf("%d: %s\n",num,Q.c_str());    //【skill】将Q转为可用printf输出的%s
54         if(1==num)
55             query(mpTITLE,Q);
56         else if(2==num)
57             query(mpAUTHOR,Q);
58         else if(3==num)
59             query(mpKEY,Q);
60         else if(4==num)
61             query(mpPUBLISHER,Q);
62         else if(5==num)
63             query(mpYEAR,Q);
64  
65 
66     }
67     return 0;
68 }

 

posted on 2015-03-11 23:15  Evence  阅读(231)  评论(0编辑  收藏  举报