A1022 Digital Library (30分)

一、技术总结

  1. 首先这是一个map,STL类型的题目,前面的一个问题是存储,首先可能会想到的是,把每个信息存储下来然后通过输入想要查询的方式进行查询。可是,如果这里会发现,是通过关键词然后查询输出,相关book的id号。这个样其实就可以使用map,把相关的关键词作为一个string,然后id使用一个set容器进行存储。
  2. 所以存储的形式就是map<string, set >
  3. 还有一点需要注意的是,查询函数query(),参数注意要使用引用,不然会有超时。
  4. 还有就是在输入一行中的单个字符串的时候,包括空格,应该怎么处理:
while(cin >> str){
    tkey[str].insert(id);
    char c = getchar();
    if(c == '\n') break;
}

二、参考代码

#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;
map<string, set<int> > ttitle, tkey, tauthor, tpub, tyear;
void query(map<string, set<int> > &m, string &str){
    if(m.find(str) != m.end()){
        for(auto it = m[str].begin(); it != m[str].end(); it++){
            printf("%07d\n", *it);
        }
    }else{
        printf("Not Found\n");
    }
}
int main(){
    int n, m, id, num;
    scanf("%d", &n);
    string title, key, author, pub, year;
    for(int i = 0; i < n; i++){
        scanf("%d\n", &id);
        getline(cin, title);
        ttitle[title].insert(id);
        getline(cin, author);
        tauthor[author].insert(id);
        while(cin >> key){
            tkey[key].insert(id);
            char c = getchar();
            if(c == '\n') break;
        }
        getline(cin, pub);
        tpub[pub].insert(id);
        getline(cin, year);
        tyear[year].insert(id);
    }
    scanf("%d", &m);
    for(int i = 0; i < m; i++){
        scanf("%d: ", &num);
        string temp;
        getline(cin, temp);
        cout << num << ": " << temp << "\n";
        if(num == 1) query(ttitle, temp);
        else if(num == 2) query(tauthor, temp);
        else if(num == 3) query(tkey, temp);
        else if(num == 4) query(tpub, temp);
        else if(num == 5) query(tyear, temp);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/tsruixi/p/12245456.html

时间: 2024-08-29 21:01:44

A1022 Digital Library (30分)的相关文章

A1022. Digital Library (30)

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

PAT-1022 Digital Library (30 分) 字符串处理

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

PAT Advanced 1022 Digital Library (30分)

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

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<strin

C++ STL map A1022. Digital Library(30) (注意字符串的读入)

#include <bits/stdc++.h> #include<math.h> #include <string> using namespace std; //5个map变量分别建立书名,作者,关键词,出版社及出版年份与id的映射关系 map<string,set<int>> mpTitle,mpAuthor,mpKey,mpPub,mpYear; void query(map<string,set<int>>&am

pat1022. Digital Library (30)

1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Ea

PAT甲级——A1022 Digital Library

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

1022. Digital Library (30)

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are s

1022. Digital Library (30) -map -字符串处理

题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you