Maison > développement back-end > C++ > Quelle est la méthode la plus efficace pour supprimer les doublons et trier un vecteur C ?

Quelle est la méthode la plus efficace pour supprimer les doublons et trier un vecteur C ?

Patricia Arquette
Libérer: 2024-12-26 03:39:09
original
973 Les gens l'ont consulté

What's the Most Efficient Method for Removing Duplicates and Sorting a C   Vector?

Le moyen le plus efficace d'effacer les doublons et de trier un vecteur

Pour effacer efficacement les doublons et trier un vecteur C, envisagez l'approche du tri et puis en utilisant la fonction std::unique. Cependant, il existe un défaut potentiel dans le code que vous avez fourni : la fonction unique modifie l'ordre des éléments, ce qui peut perturber l'ordre de tri.

De plus, l'ordre des opérations peut avoir un impact sur les performances. Si le vecteur contient de nombreux doublons, les effacer d'abord (en utilisant unique) peut être plus efficace. Cependant, si les doublons sont répartis uniformément, le tri en premier peut être plus rapide.

Une alternative plus efficace consiste à convertir le vecteur en std::set à l'aide d'un constructeur d'ensemble :

set<int> s(vec.begin(), vec.end());
vec.assign(s.begin(), s.end());
Copier après la connexion

Cette approche garantit l'unicité et un tri correct car elle utilise les propriétés naturelles d'un ensemble. Comme le montre le benchmark fourni, lorsque le nombre de doublons est suffisamment grand, la conversion en un ensemble et inversement est plus rapide que la manipulation directe du vecteur.

Enfin, il convient de noter que la conversion manuelle en un ensemble (par exemple, set< ;int> s; for (unsigned i = 0; i < size; i) s.insert(vec[i]);) peut être légèrement plus rapide que d'utiliser l'ensemble constructeur sur de petits ensembles de données. Cependant, pour les grands vecteurs, le constructeur d'ensemble devient plus efficace.

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