Maison > développement back-end > C++ > le corps du texte

Comment les algorithmes STL aident-ils à supprimer les doublons d'un vecteur non trié ?

DDD
Libérer: 2024-11-12 10:39:02
original
265 Les gens l'ont consulté

How do STL Algorithms Help Remove Duplicates from an Unsorted Vector?

Suppression des doublons de vecteurs non triés : une promenade avec les algorithmes STL

Face à la tâche d'éliminer les éléments en double d'un vecteur non trié tout en en préservant l'ordre initial, il est tentant de se lancer dans une approche itérative, en suivant et en supprimant fastidieusement les entrées indésirables. Mais attendez, il existe un meilleur moyen : un chemin pavé d'algorithmes STL.

L'échelle STL pour la suppression des doublons

STL dispose d'un puissant arsenal d'algorithmes, y compris std ::copy_if, méticuleusement conçu pour de tels scénarios. Cette potion magique prend une source itérable (comme votre vecteur), une destination (où vous souhaitez que les doublons disparaissent) et un prédicat pour guider le processus de sélection.

Création du détecteur de doublons

La clé pour débloquer les prouesses de std::copy_if réside dans la création d'un prédicat personnalisé qui détecte les doublons. Ici, nous introduisons NotDuplicate, un objet fonction qui insère avec empressement des éléments dans un ensemble et utilise le principe sacré selon lequel « un ensemble ne peut pas tous les contenir ». Il renvoie gracieusement false lorsqu'un élément a déjà été rencontré.

Le Swift Swipe de l'algorithme

Avec notre fidèle prédicat NotDuplicate en main, nous pouvons invoquer std::copy_if pour parcourir élégamment notre vecteur. Chaque élément est présenté à NotDuplicate, qui consulte son ensemble d'éléments vus et n'accorde le passage qu'aux nouveaux arrivants de bonne foi. Les survivants uniques glissent dans le conteneur de destination, laissant les doublons périr dans le vide numérique.

Un aperçu de la grâce du Code

Jetons un coup d'œil dans les coulisses de notre solution élégante :

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             std::ref(pred));
Copier après la connexion

Cet extrait de code vierge appelle NotDuplicate pour aider std::copy_if, en parcourant rapidement votre vecteur et en tissant une nouvelle tapisserie sans doublon.

En C 11's Embrace

Si vous avez la chance de bénéficier de la douce étreinte de C 11, vous pouvez libérer le pouvoir captivant des lambdas et orner votre code d'une touche d'élégance succincte :

std::vector<int> uniqueNumbers;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             [](const int& element) {
                return s_.insert(element).second; // true if s_.insert(element);
             });
Copier après la connexion

À retenir : les algorithmes, vos alliés fidèles

N'oubliez pas que le but des algorithmes STL n'est pas de vous transformer en un assistant d'algorithme mais d'augmenter vos prouesses en programmation. Adoptez leur riche éventail de fonctionnalités et vous vous retrouverez à libérer tout le potentiel de votre code avec facilité et efficacité.

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