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
Susan Sarandonoriginal
2024-12-02 17:31:14430parcourir

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;
        }
    }
}

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!

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