如何为地图创建迭代器<string,map <string,=“”classx =“”>&gt;?

时间:2016-05-08 10:24:27

标签: c++ dictionary iterator

对于大学工作,我必须实现map<string, map<string, class x> >,其中类x是文本的容器。 我的问题是下一个:这个类x的迭代器看起来如何?我是否必须创建一个中间迭代器来访问地图中的地图,或者有什么方法可以直接访问类x? 我听说过“查找”选项,但我不知道如何在地图中使用地图。 谢谢。

2 个答案:

答案 0 :(得分:1)

首先,如果声明新类型,处理结构,可以使代码更具可读性。

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循环。

答案 1 :(得分:0)

我猜您正在使用较新版本的C ++。

然后,你可以简单地使用auto keyword和基于范围的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) {

    }
}