gpt4 book ai didi

c++ - boost::unordered_map 中的迭代器失效

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:28 25 4
gpt4 key购买 nike

我正在使用 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);
}



}
  1. 更改列表是否会使 instrMap 的迭代器失效?

  2. 删除元素将使指向被删除元素的迭代器失效。我该如何修改我的代码,这样这不会导致任何问题?使用 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;
}
}

关于c++ - boost::unordered_map 中的迭代器失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com