c++ - 如何找出给定值存储在映射的哪个键下?

标签 c++ string c++11 stdvector stdmap

std::map<std::string, std::vector<std::string>> myMap

我们如何找出字符串“55”存储在 myMap 的哪个键下?

std::vector<string> vec1 = {"11", "22", "33"};
std::vector<string> vec2 = {"44", "55"};
std::vector<string> vec3 = {};

std::string key1 = "1";
std::string key2 = "2";
std::string key3 = "3";

myMap.insert(std::make_pair(key1, vec1));
myMap.insert(std::make_pair(key2, vec2));
myMap.insert(std::make_pair(key3, vec3));

最佳答案

您可以使用std::find_if使用 lambda 来迭代 vector ,并且 std::find按 vector 执行查找:

auto lookup = "55";
auto it = std::find_if(
    std::begin(myMap),
    std::end(myMap),
    [&](const std::map<std::string, std::vector<std::string>>::value_type& p) 
    { 
        return std::find(std::begin(p.second), std::end(p.second), lookup) != std::end(p.second);
    } 
    );

if(it != std::end(myMap))
    std::cout << it->first;

或者使用 C++14 中的通用 lambda,它更干净:

auto lookup = "55";
auto it = std::find_if(
    std::begin(myMap),
    std::end(myMap),
    [&](auto& p) 
    { 
        return std::find(std::begin(p.second), std::end(p.second), lookup) != std::end(p.second);
    } 
    );

<强> Demo

关于c++ - 如何找出给定值存储在映射的哪个键下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180018/

相关文章:

c++ - 优化 Dijkstra 算法

字符串编码算法

Swift switch char{ case "\u{e2} :

c++ - 在多个线程中递减索引

c++ - 如何测试 double 值是否不为负

Javascript 只接收一次 ActiveX 事件

c++ - 在不同的编译器上转换为void **

c# - 将字符串转换为 double 时出现奇怪的输出

c++ - wxWidgets,Bind 是不是很新?因为我的编译器说它没有定义。 wxVer 2.8.12.1,我一直在 wxPython 中使用 Bind for ....至少 2.6

c++ - 如何在 C++ 中检查 "long long int"的特定位