c++ - 从 c++ 中的 unordered_map 访问值

标签 c++ unordered-map

我有一个 unordered_map:

unordered_map<string, list<string>> adj_list;

如何查看字符串列表 list<string>包含一个值?

我尝试过:

if(adj_list.find("find")) printf("value found");

但它给了我一个转换错误。 如何访问此 unordered_map 中的第一个字符串和第二个字符串列表? 澄清:我有一个值 "here"这是 adj_list 中的第一个字符串,我想找"find"在属于 "here" 的字符串列表中.

最佳答案

如果您知道 key ,您可以执行以下操作:

auto l = adj_list.find("here"); // here we get the correct list
if(l != adj_list.end())
{
    if(std::find(l->second.begin(), l->second.end(),"find") != l->second.end())
    {
        printf("Found");
    }
}

如果您不知道正确 list<string> 的关键是什么,您可以这样做 map 上是:

for(auto it=adj_list.begin(); it != adj_list.end(); ++it)
{
    if(std::find(it->second.begin(), it->second.end(),"find") != it->second.end())
    {
        printf("Found");
    }
}

完整代码:

#include<iostream>
#include<unordered_map>
#include<list>
#include<string>

int main()
{
    std::unordered_map<std::string, std::list<std::string>> adj_list;
    std::list<std::string> l;
    l.emplace_back("find");

    adj_list.emplace("string", l);
    for (auto it = adj_list.begin(); it != adj_list.end(); ++it)
    {
        if (std::find(it->second.begin(), it->second.end(), "find") != it->second.end())
        {
            printf("Found");
        }
    }
    return 0;
}

关于c++ - 从 c++ 中的 unordered_map 访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62354314/

相关文章:

c++ - 如何在 C++ 中为模板函数实例创建快捷方式?

c++ - 回调例程未被触发

C++:使用 boost unordered_map 错误:没有匹配的函数调用

c++ - 如何将 BOOST_FOREACH 与 Unordered_map 一起使用?

c++ - 使用 Boost unordered_map

c++ - 如何使用 re2 获取部分匹配项的数量

c++ - GNU 调试器不显示 C++ 结构中的所有数据

c++ - 从枚举中获取所有值

c++ - 具有多个值的无序映射

c++ - C++ 中的 vector 到字符串和 HashMap