ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 当map包含string的向量作为值时,从值获取键的有效方法

2019-08-28 00:04:55  阅读:152  来源: 互联网

标签:c c11 stdmap


如何使用值作为字符串向量来获取密钥,反之亦然.以下是我的代码.

#include<iostream>
#include<map>
#include<string>
#include <unordered_map>
#include <vector>

using namespace std;
int main()
{
std::unordered_map<std::string, std::vector<std::string>> Mymap;
Mymap["unique1"] = {"hello", "world"};
Mymap["unique2"] = {"goodbye", "goodmorning", "world"};
Mymap["unique3"] = {"sun", "mon", "tue"};

for(auto && pair : Mymap) {
        for(auto && value : pair.second) {
                std::cout << pair.first<<" " << value<<"\n";
                if(value == "goodmorning") // how get key i.e unique2 ?
        }}
}

情况1:输入值时.键输出.

Input  : goodmorning
output : unique2

情况2:当输入键时输出值.

Input : unique3
output: sun ,mon ,tue

注意:没有可用的增强库.

解决方法:

对于案例1,find_if和any_of的组合将完成这项工作.

对于案例2,您只需使用unordered_map的find方法即可.

#include<iostream>
#include<map>
#include<string>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    unordered_map<string, vector<string>> Mymap;
    Mymap["unique1"] = { "hello", "world" };
    Mymap["unique2"] = { "goodbye", "goodmorning", "world" };
    Mymap["unique3"] = { "sun", "mon", "tue" };

    // Case 1

    string test_value = "goodmorning";
    auto iter1 = find_if(Mymap.begin(), Mymap.end(),
        [&test_value](const decltype(*Mymap.begin()) &pair)
        {
            return any_of(pair.second.begin(), pair.second.end(), [&test_value](const string& str) { return str == test_value; });
        });

    if (iter1 != Mymap.end())
    {
        cout << "Key: " << iter1->first << endl;
    }
    else
    {
        cout << "No key found for " << test_value;
    }

    // Case 2

    test_value = "unique3";
    auto iter2 = Mymap.find(test_value);
    if (iter2 != Mymap.end())
    {
        int first = true;
        for (auto v : iter2->second)
        {
            cout << (first ? "" : ", ") << v;
            first = false;
        }
        cout << endl;
    }
    else
    {
        cout << "No value found for key " << test_value << endl;
    }

    return 0;
}

标签:c,c11,stdmap
来源: https://codeday.me/bug/20190827/1746175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有