Maison > développement back-end > C++ > Comment utiliser correctement l'idiome Effacer-Supprimer pour supprimer des paires dans un vecteur en fonction d'un premier élément spécifique ?

Comment utiliser correctement l'idiome Effacer-Supprimer pour supprimer des paires dans un vecteur en fonction d'un premier élément spécifique ?

Patricia Arquette
Libérer: 2024-11-13 03:29:02
original
906 Les gens l'ont consulté

How to Correctly Use the Erase-Remove Idiom for Removing Pairs in a Vector Based on a Specific First Element?

Utilisation de l'idiome Effacer-Supprimer avec des conteneurs de paires

Supposons que nous ayons un vecteur de paires >, où le premier élément désigne une valeur et le second une direction d'énumération. Pour supprimer des paires spécifiques en fonction de leur premier élément, l'idiome effacer-supprimer est une approche appropriée.

Cependant, comme le démontre la question, la suppression de paires avec une première valeur de 4 entraîne un comportement inattendu. Pour remédier à cela, nous devons fournir la plage correcte à la fonction std::erase.

Le code amélioré ressemble à ceci :

stopPoints.erase(std::remove_if(stopPoints.begin(),
                                stopPoints.end(),
                                [](const stopPointPair stopPoint) -> bool 
                                       { return stopPoint.first == 4; }), 
                 stopPoints.end());
Copier après la connexion

Voici pourquoi cela fonctionne correctement :

  • std::remove_if: Cette fonction prend une plage (du début à la fin du vecteur) et un prédicat lambda qui vérifie si le premier élément de la paire est égal à 4. Il réorganise les éléments du vecteur de telle sorte que toutes les paires correspondantes soient à la fin.
  • Itérateur renvoyé : Le résultat de std::remove_if est un itérateur pointant vers le premier élément qui correspond au prédicat (c'est-à-dire le premier élément à supprimer).
  • std::erase: La fonction d'effacement supprime une plage commençant par l'itérateur renvoyé par std::remove_if jusqu'à la fin du vecteur . Par conséquent, toutes les paires correspondantes sont éliminées.

En spécifiant la plage correcte dans l'appel std::erase, nous garantissons que toutes les paires avec la première valeur spécifiée sont supprimées efficacement.

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