Maison > Article > développement back-end > Comment supprimer les doublons d'un tableau non trié tout en conservant l'ordre d'insertion à l'aide des algorithmes STL ?
Algorithmes STL pour la suppression des doublons avec préservation de la commande
Étant donné un tableau d'entiers non triés, la tâche consiste à supprimer les éléments en double tout en préservant l'insertion ordre de la première occurrence de chaque entier. Bien qu'une approche simple utilisant un ensemble puisse y parvenir, une solution optimisée tirant parti des algorithmes STL offre une solution plus efficace et plus élégante.
Approche basée sur l'algorithme STL
STL fournit plusieurs algorithmes qui facilitent une manipulation efficace des conteneurs. Un de ces algorithmes est std::copy_if. Cet algorithme peut être utilisé pour créer un nouveau vecteur contenant des éléments uniques tout en conservant leur ordre d'origine.
Pour implémenter cette solution, définissez une fonction de prédicat qui garde la trace des éléments précédemment rencontrés et renvoie false si un élément a déjà été traité. Cela garantit que seuls les éléments uniques sont copiés dans le nouveau vecteur.
Implémentation
En C 11 et versions ultérieures, définissez un objet fonction avec un opérateur surchargé() qui implémente le prédicat :
template <typename T> struct NotDuplicate { bool operator()(const T& element) { return s_.insert(element).second; // true if element is unique } private: std::set<T> s_; };
Transmettez ce prédicat à std::copy_if avec les vecteurs d'origine et cible :
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
Si le support C 11 n'est pas disponible, utilisez std::remove_copy_if et inversez la logique des prédicats pour obtenir le même résultat.
Conclusion
Cette approche démontre l'efficacité des algorithmes STL pour manipuler efficacement les conteneurs tout en garantissant le respect des exigences de commande souhaitées. . En tirant parti de l'algorithme std::copy_if, vous pouvez supprimer les doublons d'un vecteur non trié tout en préservant l'ordre d'insertion des éléments uniques.
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!