在 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"
。
如果你知道密钥,你可以这样做:
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;
}
要在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"; }
}
如果你想搜索具有键"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";
}
}
相关文章:
- 使用 map.end() 访问 map 的最后一个元素
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?
- 使用 std::map 存储在 std::any 中,然后通过 std::any_cast 访问
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 阻止直接访问 std::map 键
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 访问基于范围的循环(如for_each)中的std::map迭代器
- 使用 operator[] 访问私有 std::map of unique_ptr
- 正确的友元定义,以授予 std::map 对私有默认构造函数的访问权限
- 当对象为值时访问实例方法<map>
- 在 c++ 中访问 std::map 的多个线程
- C++ std::map 如何按索引位置访问密钥
- 动态创建一个继承的类,使用STD :: MAP使用基类指针访问
- 如果迭代器的迭代器永远不会无效,则是STD :: MAP访问线程安全
- std::map.clear()正在引发读取访问冲突
- std::map访问速度太慢
- Eclipse CDT 在从 std::map 访问时无法解析结构函数
- 使用map访问结构/类的成员
- 通过std::unique_ptr使用std::map访问操作符[]的正确语法
- 从map访问,将字符串转换为char*