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

Comment supprimer les doublons d'un vecteur non trié tout en maintenant l'ordre ?

Linda Hamilton
Libérer: 2024-11-13 05:59:02
original
344 Les gens l'ont consulté

How to Remove Duplicates from an Unsorted Vector while Maintaining Order?

Suppression des doublons d'un vecteur non trié

Maintenir l'ordre des premières occurrences tout en éliminant les doublons d'un vecteur non trié est crucial dans diverses situations. Bien qu'une approche simple utilisant une itération définie et manuelle soit efficace, elle peut être améliorée en tirant parti des algorithmes STL.

Pour y parvenir, l'algorithme std::copy_if fournit une solution pratique. En définissant un prédicat qui garde la trace des éléments déjà traités et renvoie false pour les doublons, nous pouvons filtrer les éléments souhaités.

Si la prise en charge de C 11 n'est pas disponible, le nom maladroit std::remove_copy_if peut être utilisé, avec sa logique est inversée. Voici un exemple non testé pour illustrer :

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second; // true if s_.insert(element);
  }
 private:
  std::set<T> s_;
};
Copier après la connexion

Ensuite, le code suivant peut être utilisé :

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

Dans cette solution, le std::ref garantit que le foncteur avec état n'est pas copié en interne dans l’algorithme. Cependant, std::copy_if n'impose aucune exigence sur les effets secondaires du foncteur appliqué.

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