![](/img/trans.png)
[英]How to erase an element in boost unordered_map by local_iterator?
[英]Iterator invalidation in boost::unordered_map
我正在使用boost::unordered_map
如下
typedef boost::shared_ptr<WriterExeciter> PtrWriter;
typedef std::list<PtrWriter> PtrList;
boost::unordered_map<std::pair<unsigned int, unsigned long long>, PtrList> Map
Map instrMap;
现在,我在循环中对PtrList
类型的列表进行了一些更改
for(auto it = instrMap.begin(); it != instrMap.end(); ++it)
{
auto key = it->first();
auto list& = it->second();
//Make some change to an element in list
if(list.empty())
{
instMap.erase(key);
}
}
更改列表是否会使instrMap的迭代器无效?
擦除该元素将使迭代器指向已擦除的元素无效。 如何修改我的代码,这样就不会造成任何问题? 使用it++
代替++it
帮助吗?
谢谢
erase()
操作将使迭代器无效。 但是,它还会向下一个元素返回有效的迭代器。 因此,您可以使用以下内容:
for(auto it = instrMap.begin(); it != instrMap.end();)
{
auto key = it->first();
auto list& = it->second();
//Make some change to an element in list
if(list.empty())
{
it = instMap.erase(it);
}
else {
++it;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.