我有

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

我可以以某种方式避免创建临时多重映射吗?谢谢

有帮助吗?

解决方案

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

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

也许:

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

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

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

编辑:我同意米科拉·戈卢比耶夫的观点:将迭代器存储较长时间通常是一个坏主意,因为迭代器可能会失效。

其他提示

您还没有指定您在list存储的数据类型。总之,假设你要添加(S),在特定的键指着值,你可以调用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);

在型std::multimap<std::string,std::string>::iterator是一个迭代到std::pair<const std::string, std::string>存储在一个std ::多重映射即可。如果元素没有被存储在一个多重映射,它不能被通过mulitmap迭代称为

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

不要储存迭代器。请使用常量迭代器或者更好的办法是指针存储到地图的元素。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top