Параллельное изменение карты во время итерации - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующий код:

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"

Как я могу обойти это исключение? Я хочу убедиться, что на карте нет элементов, которые уже есть в списке.

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете просто сделать:

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

Демо

иначе вы должны использовать возвращаемое значение erase, чтобы выбрать правильный итератор.

...