【问题标题】:How to convert c++ std::list element to multimap iterator如何将 c++ std::list 元素转换为多映射迭代器
【发布时间】:2009-03-23 09:44:10
【问题描述】:

我有

std::list<multimap<std::string,std::string>::iterator> >

现在我有了新元素:

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")

我想避免设置临时多映射并插入新元素只是为了取回它的迭代器 所以我可以把它推回:

std::list<multimap<std::string,std::string>::iterator> >

我能否以某种方式避免创建临时多图。 谢谢

【问题讨论】:

  • 请清理一下清单?

标签: c++ list stl iterator multimap


【解决方案1】:

在获取迭代器之前,您需要将键值对插入到多重映射中。

迭代器本身不能工作。如果您要存储来自多个不同多图的迭代器,您可能需要在列表中存储的不仅仅是一个迭代器。

也许:

  1. a pair&lt;multimap&lt;std::string,std::string&gt;::iterator, multimap&lt;std::string,std::string&gt;::iterator&gt; 其中第一个是迭代器,第二个是结束迭代器。

  2. a pair&lt;multimap&lt;std::string,std::string&gt;::iterator, multimap&lt;std::string,std::string&gt;*&gt; 其中第一个是迭代器,第二个是指向该迭代器所属的多重映射的指针。

  3. 其他类型的解决方案。

编辑:我同意 Mykola Golubyev 的观点:将迭代器存储更长的时间通常是一个坏主意,因为迭代器可能会失效。

【讨论】:

    【解决方案2】:

    您尚未指定存储在list 中的数据类型。无论如何,假设您要添加特定键指向的值,您可以调用list.insert(*mapIter)。

    multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")
    

    您需要通过map.insert 将其添加到您的多重地图中。此函数返回一个迭代器。然后,您可以安全地将此迭代器添加到您的列表中。

    std::list<multimap<std::string,std::string>::iterator> yourlist;
    // ....
    multimap<std::string,std::string>::iterator itr = 
                                   yourmultimap.insert(aNewMmapValue);
    yourlist.insert(itr);
    

    【讨论】:

      【解决方案3】:

      std::multimap&lt;std::string,std::string&gt;::iterator 类型是 std::pair&lt;const std::string, std::string&gt; 的迭代器存储在 std::multimap 中。如果元素未存储在 multimap 中,则无法通过 multimap 迭代器引用它。

      您可能希望使用std::list&lt;std::pair&lt;std::string,std::string&gt; &gt; 来存储。

      【讨论】:

        【解决方案4】:

        不要存储迭代器。使用 const 迭代器或更好的方法是将指针存储到映射中的元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-10
          • 2021-10-02
          • 2011-02-11
          • 1970-01-01
          • 2021-04-15
          • 2011-07-31
          相关资源
          最近更新 更多