Qu'advient-il si vous appelez effacer() sur un élément de la carte lors de l'itération de commencer à la fin?

Dans le code suivant, je boucle sur une carte et de tester si un élément doit être effacé. Est-il sûr d'effacer l'élément et de garder l'itération ou dois-je chercher les clés dans un autre récipient et faire une seconde boucle pour appeler l'effacer()?

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it;
for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++)
{
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it->first);
    }
}

Mise à JOUR: bien sûr, j'ai ensuite lisez cette question qui je ne pense pas que se soit lié mais répond à ma question.

  • Veuillez noter en question que std::remove_if ne fonctionne pas avec std:map
InformationsquelleAutor MattSmith | 2008-11-05