zoukankan      html  css  js  c++  java
  • A1022 Digital Library (30分)

    思路如下

    比如我用户输入一个用 "Yue Chen" 来搜索,可以找到 id 为 "1111111" 和 "3333333" 两本书,那实际上就是映射了,而且是一个对应多个的映射,自然就想到了用从 string 到 vector<string> 的映射了

    基于这个思路,我又是这样展开想的:

    /* 伪码 */
    1. 输入:将输入的用户搜索词 L2 ~ L6 全部当成键,其值为 L1
    2. 输出:从 map 中取出值加入到 vector<string>,因为要排序

    对于第一点,输入

    cin >> L1;
    
    for (对其余 L2 ~ L6 每行,记为 Lx) {
        cin >> Lx;
        if (键 Lx 不在 map) {
            vector<string> v;
            v.push_back(L1);
            map[Lx] = v;
        } else {
            vecotr<string> v;
            map<string, vector<string> >::iterator mi;
            mi = map.find(Lx);
            v = mi->second;
            v.push_back(L1);
            map[Lx] = v;
        }
    }

    对于第二点,输出

    for (遍历用户输入所有搜索词) {
        //如 "2: Yue Chen" 首先要去除前面 3 位序号,获得关键字
        int len = 0;
        for (; len < 用户搜索词.size(); ++len);
        str = 用户搜索词.substr(3, len);
    
        //用这个关键字查找映射
        if (map.find(关键字) != map.end()) {
            map<string, vector<string> >::iterator mi;
            mi = map.find(关键字);
            sort(mi->second.begin(), mi->second.end());//按增序排序
    
            for (对每个 mi->second 元素)    cout << 元素 << endl;
        } else    cout << "Not Found" << endl;
    }

    当然,有些细节还是要注意的,比如对用户输入 L4 的处理——每个关键字都需要被添加入 map。但主要思路就是这两部分

    另外,也记录下我刷题过程中遇到的小问题:

    1.  cin >>  与  getline() 同时使用的问题,前者遇到回车、空格或制表符会停止而且这些终止符会被留在缓冲区;后者只遇回车停止而且回车会被取走忽略。所以一个 cin >>  要对应一个 cin.ignore(); 以删除终止符,否则 cin >>  之后使用 getline(); 是得不到正确输入的

    点击跳转至完整代码

     
  • 相关阅读:
    函数及其表示
    集合等离散数学内容
    求和
    分式·新方法
    弹力、重力、摩擦力
    洛谷 P1357 花园
    浮力
    因式分解·新方法
    压强
    洛谷 P2051 [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/bEngi1/p/14359425.html
Copyright © 2011-2022 走看看