0

我有

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

4 回答 4

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);
于 2009-03-23T09:48:18.400 回答
2

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

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

也许:

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

  2. apair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*>其中 first 是迭代器, second 是指向迭代器所属的多重映射的指针。

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

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

于 2009-03-23T09:58:14.210 回答
1

该类型std::multimap<std::string,std::string>::iteratorstd::pair<const std::string, std::string> 存储在 std::multimap 中的 a的迭代器。如果元素未存储在多映射中,则不能通过多映射迭代器引用它。

您可能想要存储使用 astd::list<std::pair<std::string,std::string> >来代替。

于 2009-03-23T16:06:24.217 回答
1

Don't store iterators. Use either const iterators or better way is store the pointers to the elements in the map.

于 2010-04-10T04:50:14.817 回答