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/