如何为映射<字符串,映射<字符串,类> >创建迭代器?
How to create an iterator for a map <string, map<string, classx> >?
对于大学作业,我必须实现map<string, map<string, class x> >
,其中x类是文本容器。我的问题是下一个:这个类x的迭代器会是什么样子?我是否必须创建一个中间迭代器来访问映射中的映射,或者有任何方法可以直接访问类x?我听说过"查找"选项,但我不知道如何在地图中使用它。非常感谢。
首先,如果您声明新的类型,处理您的结构,您可以使代码更可读。
using inner_map = std::map<std::string, classx>;
using outer_map = std::map<std::string, inner_map>;
outer_map variable;
如果你想得到classx
,你必须得到inner_map
中的元素。然而,要达到这一点,您必须迭代outer_map
for (outer_map::iterator outer_iterator = variable.begin(); outer_iterator != variable.end(); ++outer_iterator)
{
for (inner_map::iterator = inner_iterator = outer_iterator->second.begin(); inner_iterator != outer_iterator->second.end(); ++inner_iterator)
{
// decltype(inner_iterator->second) == classx
}
}
如果您想使用classx
,并且不坚持显式使用迭代器,那么可以使用IvanV指出的基于范围的for循环。
我猜您使用的是较新版本的C++。
然后,您可以简单地使用auto关键字和基于范围的for循环。
//entry1.first is key, and entry1.second is your map<string,classx>
for (auto const& entry1: yourMap) {
//iterating through second map here
// entry2.second is classx
for (auto const& entry2: entry1.second) {
}
}
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中