在迭代期间同时修改映射

问题描述 投票:0回答:1

我有以下代码:

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"

我该如何解决这个例外?我想确保列表中已有的元素不在列表中。

c++ iterator erase
1个回答
2
投票

你可能只是这样做:

std::list<std::tuple<int, double>> myList(myMap.begin(), myMap.end());
myMap.clear();

Demo

否则你必须使用erase的返回值来获取正确的迭代器。

© www.soinside.com 2019 - 2024. All rights reserved.