【问题标题】:How to create an iterator for a map <string, map<string, classx> >? [closed]如何为 map <string, map<string, classx>> 创建一个迭代器? [关闭]
【发布时间】:2016-05-08 10:24:27
【问题描述】:

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

【问题讨论】:

  • map&lt;string, map&lt;string, class x&gt; &gt;::iterator。但也许你应该更好地使用find()auto

标签: c++ dictionary iterator


【解决方案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 循环。

【讨论】:

    【解决方案2】:

    我猜你正在使用更新版本的 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) {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 2015-12-05
      • 2018-02-26
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多