如何将 c++ std::list 元素转换为多重映射迭代器
题
我有
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> >
我可以以某种方式避免创建临时多重映射吗?谢谢
解决方案
在获取迭代器之前,您需要将键值对插入到多重映射中。
迭代器本身不能工作。如果您要存储来自多个不同多重映射的迭代器,您可能需要在列表中存储的不仅仅是一个迭代器。
也许:
A
pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator>
其中第一个是迭代器,第二个是结束迭代器。A
pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*>
其中第一个是迭代器,第二个是指向迭代器所属多重映射的指针。一些其他类型的解决方案。
编辑:我同意米科拉·戈卢比耶夫的观点:将迭代器存储较长时间通常是一个坏主意,因为迭代器可能会失效。
其他提示
您还没有指定您在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> >
代替。
不要储存迭代器。请使用常量迭代器或者更好的办法是指针存储到地图的元素。