san*_*ank 4 c++ 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;
Run Code Online (Sandbox Code Playgroud)
现在我正在对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);
}
}
Run Code Online (Sandbox Code Playgroud)
对列表进行更改是否会使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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2996 次 |
| 最近记录: |