在 C++ 中从 unordered_map 访问值
accessing values from unordered_map in c++
我有一个 unordered_map:
unordered_map<string, list<string>> adj_list;
如何查看字符串列表 list<string>
是否包含值?
我试过了:
if(adj_list.find("find")) printf("value found");
但它给我一个转换错误。
如何访问此 unordered_map
中的第一个字符串和第二个字符串列表?
说明:我有一个值 "here"
,它是 adj_list
中的第一个字符串,我想在属于 "here"
的字符串列表中找到 "find"
。
要在 std::list
中查找元素,您可以使用 std::find
:
std::unordered_map<string, list<string>> adj_list /* = ..*/;
auto it_umap = adl_list.find("here");
if (it_umap != adl_list.end())
{
auto& words = it_umap->second;
auto it = std::find(words.begin(), words.end(), "find");
if (it != words.end()) { std::cout << "value found"; }
}
如果您知道密钥,您可以这样做:
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>
的关键是什么,您可以这样做:
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;
}
如果你想搜索具有关键字 "here" 的列表,那么就这样做(假设你知道 "here" 条目确实存在)
auto &here = adl_list["here"];
if (std::find(here.begin(), here.end(),"find") != here.end())
{
std::cout << "found";
}
如果可能不存在,那么做
auto &lookup= adl_list.find("here");
if(lookup != adl_list.end())
{
auto &here = lookup.second;
if (std::find(here.begin(), here.end(),"find") != here.end())
{
std::cout << "found";
}
}
我有一个 unordered_map:
unordered_map<string, list<string>> adj_list;
如何查看字符串列表 list<string>
是否包含值?
我试过了:
if(adj_list.find("find")) printf("value found");
但它给我一个转换错误。
如何访问此 unordered_map
中的第一个字符串和第二个字符串列表?
说明:我有一个值 "here"
,它是 adj_list
中的第一个字符串,我想在属于 "here"
的字符串列表中找到 "find"
。
要在 std::list
中查找元素,您可以使用 std::find
:
std::unordered_map<string, list<string>> adj_list /* = ..*/;
auto it_umap = adl_list.find("here");
if (it_umap != adl_list.end())
{
auto& words = it_umap->second;
auto it = std::find(words.begin(), words.end(), "find");
if (it != words.end()) { std::cout << "value found"; }
}
如果您知道密钥,您可以这样做:
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>
的关键是什么,您可以这样做:
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;
}
如果你想搜索具有关键字 "here" 的列表,那么就这样做(假设你知道 "here" 条目确实存在)
auto &here = adl_list["here"];
if (std::find(here.begin(), here.end(),"find") != here.end())
{
std::cout << "found";
}
如果可能不存在,那么做
auto &lookup= adl_list.find("here");
if(lookup != adl_list.end())
{
auto &here = lookup.second;
if (std::find(here.begin(), here.end(),"find") != here.end())
{
std::cout << "found";
}
}