Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-11-13 03:29:02841parcourir

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());

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!

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