在迭代期间同时修改映射
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在迭代期间同时修改映射相关的知识,希望对你有一定的参考价值。
我有以下代码:
std::list<std::tuple<int,double>> myList; //assume it is empty
std::map<int,double> myMap; //assume it has values
for (auto m_itr = myMap.begin(); m_itr != myMap.end();){
myList.push_back(std::make_tuple(m_itr->first,m_itr->second));
m_itr = myMap.erase(m_itr);
}
但它抛出以下异常:
"list iterators incompatible"
我该如何解决这个例外?我想确保列表中已有的元素不在列表中。
答案
你可能只是这样做:
std::list<std::tuple<int, double>> myList(myMap.begin(), myMap.end());
myMap.clear();
否则你必须使用erase
的返回值来获取正确的迭代器。
以上是关于在迭代期间同时修改映射的主要内容,如果未能解决你的问题,请参考以下文章
List addAll throw error :Unhandled Exception: 迭代期间并发修改:
哪些类似 python deque 的容器在突变期间保留有效的迭代器?