[PAT]1032 Sharing (25 分)-map+vector映射

1022.png
1022-2.png

分析

这是一道map+vector的题目,定义一个string映射到vector即可,唯一的麻烦点就是在输入的时候要处理关键字!

ac代码

#include<bits/stdc++.h>
using namespace std;
map< string,vector<string> > m;

int main(){
    int n;
    cin>>n;
    getchar();
    for(int i=0;i<n;i++){
        string ID,name,author,keyword,printer,year;
        getline(cin,ID);
        getline(cin,name);
        if(m.count(name)==0){
            vector<string> v;
            v.push_back(ID);
            m[name]=v;
        }else{
            m[name].push_back(ID);
        }
        
        getline(cin,author);
        if(m.count(author)==0){
            vector<string> v;
            v.push_back(ID);
            m[author]=v;
        }else{
            m[author].push_back(ID);
        }
        
        getline(cin,keyword);
        int index=0;
        while(index<keyword.length()){
            string word="";
            while(keyword[index]!=' ' && index<keyword.length()){
                word+=keyword[index];
                index++;
            }
            index++;
            
            if(m.count(word)==0){
                vector<string> v;
                v.push_back(ID);
                m[word]=v;
            }else{
                m[word].push_back(ID);
            }
        }
        
        if(m.count(keyword)==0){
            vector<string> v;
            v.push_back(ID);
            m[keyword]=v;
        }else{
            m[keyword].push_back(ID);
        }
        
        getline(cin,printer);
        if(m.count(printer)==0){
            vector<string> v;
            v.push_back(ID);
            m[printer]=v;
        }else{
            m[printer].push_back(ID);
        }
        
        getline(cin,year);
        if(m.count(year)==0){
            vector<string> v;
            v.push_back(ID);
            m[year]=v;
        }else{
            m[year].push_back(ID);
        }
        
    }
    //cout<<m["The Testing Book"][1]<<endl;

    int p;
    cin>>p;
    getchar();
    for(int i=0;i<p;i++){
        string s;
        getline(cin,s);
        string str=string(s,3,s.length());
        cout<<s<<endl;
        if(m.count(str)==1){
            sort(m[str].begin(),m[str].end());
            for(int j=0;j<m[str].size();j++){
                cout<<m[str][j]<<endl;  
            }
        }else{
            cout<<"Not Found"<<endl;
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容