Maison >développement back-end >C++ >Comment supprimer les doublons d'un vecteur non trié tout en préservant l'ordre à l'aide de STL ?

Comment supprimer les doublons d'un vecteur non trié tout en préservant l'ordre à l'aide de STL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 04:32:03532parcourir

How to Remove Duplicates from an Unsorted Vector While Preserving Order Using STL?

Supprimer les doublons d'un vecteur non trié tout en préservant l'originalité à l'aide de STL

Problème :
Trouver une solution efficace pour éliminer les doublons d'un vecteur non trié donné vecteur tout en conservant l'ordre d'origine.

Personnalisé Approche :
L'implémentation fournie utilise un ensemble pour suivre des éléments uniques. Il vérifie de manière itérative chaque élément vectoriel, en ajoutant des éléments uniques à un nouveau vecteur et en supprimant les doublons du vecteur d'origine.

Approche de l'algorithme STL :
Une solution plus rationalisée tirant parti des algorithmes STL est recommandée . Utilisez l'algorithme std::copy_if et définissez un prédicat qui suit les éléments traités. Renvoie false pour les éléments déjà traités et true sinon.

Implémentation du prédicat :
Créez une structure appelée NotDuplicate avec une méthode booléenne Operator(). Cet opérateur suit les éléments via une insertion d'ensemble. True est renvoyé si l'insertion réussit (indiquant un élément unique).

Utilisation de std::copy_if :
Utilisez std::copy_if pour parcourir le vecteur d'origine, en appliquant NotDuplicate prédicat. Les éléments uniques seront copiés dans un nouveau vecteur appelé uniqueNumbers. En référençant l'instance NotDuplicate dans std::copy_if, les effets secondaires sont évités. Cet algorithme fournit une solution plus propre et plus efficace sans qu'il soit nécessaire de supprimer manuellement les doublons ou de maintenir les itérateurs.

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