在迭代期间并发修改地图
Concurrent modification of a map during iteration
我有以下代码:
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
的 return 值来获取正确的迭代器。
我有以下代码:
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
的 return 值来获取正确的迭代器。