Maison > développement back-end > C++ > Comment supprimer en toute sécurité des éléments d'un std :: map en fonction d'une condition ?

Comment supprimer en toute sécurité des éléments d'un std :: map en fonction d'une condition ?

DDD
Libérer: 2024-12-04 17:55:13
original
863 Les gens l'ont consulté

How to Safely Remove Elements from a std::map Based on a Condition?

Suppression d'éléments d'un std::map en fonction d'une condition à l'aide d'algorithmes STL

Question :

Comment puis-je supprimer les éléments d'un std::map qui répondent à une condition spécifique tout en garantissant la validité de itérateurs ?

Problème :

remove_if ne peut pas être utilisé pour effacer des éléments d'un std::map. De plus, parcourir la carte et utiliser directement delete() peut entraîner l'invalidation des itérateurs.

Solution :

Un algorithme alternatif qui résout ces problèmes est le suivant :

for(; iter != endIter; ) {
     if (Some Condition) {
          iter = aMap.erase(iter);
     } else {
          ++iter;
     }
}
Copier après la connexion

Cet algorithme parcourt la carte et vérifie chaque élément pour la condition spécifiée. Si la condition est remplie, l'élément est effacé à l'aide de la fonction Eraser(). L'itérateur est ensuite mis à jour pour pointer vers le prochain élément valide de la carte. Cela garantit que les itérateurs restent valides même après l'effacement d'un élément.

Raison d'être :

Si l'élément vers lequel pointe actuellement l'itérateur est effacé, l'itérateur est invalidé. En mettant à jour l'itérateur après avoir effacé un élément, nous ignorons l'itérateur invalidé et évitons toute erreur d'exécution.

Remarque :

Il est important de noter que seuls les itérateurs faisant référence à l'élément effacé devient invalide. Les autres itérateurs de la carte restent valides.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal