Maison >développement back-end >C++ >Comment supprimer en toute sécurité une série d'éléments d'une carte en fonction d'une condition ?

Comment supprimer en toute sécurité une série d'éléments d'une carte en fonction d'une condition ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 20:48:11522parcourir

How to Safely Remove a Range of Elements from a Map Based on a Condition?

Effacer une plage d'éléments d'une carte avec une condition spécifique

Dans les situations où il est nécessaire de supprimer une plage spécifique d'éléments d'une carte en fonction d'une condition particulière , un algorithme équivalent "remove_if" est recherché. Cependant, Remove_if de STL ne peut pas être appliqué directement aux conteneurs associatifs tels que les cartes.

Pour obtenir cette fonctionnalité, une approche alternative consiste à parcourir la carte tout en appliquant la condition. Si la condition est remplie, l'élément correspondant est effacé. Cependant, l'effacement d'éléments à l'intérieur d'une boucle peut invalider les itérateurs.

La boucle modifiée suivante résout ce problème :

for(; iter != endIter; ) {
  if (predicate(*iter)) {
    iter = aMap.erase(iter);
  } else {
    ++iter;
  }
}

En incrémentant l'itérateur uniquement lorsque l'élément n'est pas effacé, la boucle correctement gère l'invalidation des itérateurs. Cette approche garantit que la plage d'éléments souhaitée est supprimée et peut être utilisée en toute sécurité lors d'une itération sur une carte.

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!

Déclaration:
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