如何将c ++ std :: list元素转换为multimap迭代器

时间:2009-03-23 09:44:10

标签: c++ list stl iterator multimap

我有

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> >

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

迭代器本身不起作用。如果要存储来自多个不同多图的迭代器,则可能需要在列表中存储多个迭代器。

也许:

  1. 一个pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator>,其中第一个是迭代器,第二个是结束迭代器。

  2. 一个pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*>,其中第一个是迭代器,第二个是指向迭代器所属的多图的指针。

  3. 其他一些解决方案。

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

答案 2 :(得分:1)

类型std::multimap<std::string,std::string>::iterator是存储在std :: multimap 中的std::pair<const std::string, std::string> 的迭代器。如果元素未存储在多图中,则无法通过多重映射迭代器引用它。

您可能希望存储使用std::list<std::pair<std::string,std::string> >代替。

答案 3 :(得分:1)

不存储迭代器。使用const迭代器或更好的方法是存储指向地图中元素的指针。