如何为映射<字符串,映射<字符串,类> >创建迭代器?

How to create an iterator for a map <string, map<string, classx> >?

本文关键字:gt lt 字符串 映射 创建 迭代器      更新时间:2023-10-16

对于大学作业,我必须实现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) {
    }
}