Maison > développement back-end > C++ > Comment supprimer des éléments d'une carte standard C en fonction d'une condition ?

Comment supprimer des éléments d'une carte standard C en fonction d'une condition ?

Susan Sarandon
Libérer: 2024-12-02 17:31:14
original
429 Les gens l'ont consulté

How to Remove Elements from a C   Standard Map Based on a Condition?

Équivalent de Remove-If pour les cartes standards

Question :

En C, comment puis-je supprimer une plage d'éléments d'une carte en fonction d'une condition spécifiée à l'aide de la STL algorithme ?

Réponse :

Bien que l'algorithme Remove_if ne soit pas applicable aux conteneurs associatifs comme les cartes, il existe une approche équivalente utilisant des itérateurs. Voici comment procéder :

bool predicate(const std::pair<int, std::string>& x) {
    return x.first > 2;
}

int main() {
    std::map<int, std::string> aMap;

    // Populate the map...

    std::map<int, std::string>::iterator iter = aMap.begin();
    std::map<int, std::string>::iterator endIter = aMap.end();

    for (; iter != endIter;) {
        if (predicate(*iter)) {
            // Here, increment iter after erasing
            iter = aMap.erase(iter);
        } else {
            ++iter;
        }
    }
}
Copier après la connexion

Explication :

  • Le code utilise une boucle pour parcourir la carte.
  • Lorsqu'un élément remplit la condition, l'itérateur est incrémenté après avoir effacé cet élément à l'aide de la méthode d'effacement.
  • Ceci empêche de sauter des éléments qui doivent être effacés.
  • La mise à jour de l'itérateur après l'effacement garantit que la boucle se déroule correctement, car les itérateurs peuvent devenir invalides après l'effacement d'un élément.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal