Supprimer les doublons d'un tableau de chaines

Signaler
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
-
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100034-supprimer-les-doublons-d-un-tableau-de-chaines

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Encore plus simple, 2 méthodes:

1) Soit on utilise sort + erase + unique:
  std::sort(liste.begin(), liste.end());
  liste.erase(std::unique(liste.begin(), liste.end()), liste.end());


2) Soit on converti le std::vector en std::set, puis on recopie le std::set dans le std::vector (on peut aussi choisir de conserver le std::set plutôt que de repasser au std::vector)
std::set<int> s;
unsigned int size = liste.size();
for (unsigned i = 0; i < size; ++i )
  s.insert(vec[i]);
liste.assign(s.begin(), s.end()); // Sert uniquement à recopier le std::set dans le std::vector


Méthode 1) plus rapide s'il y a peu de doublons.
Méthode 2) plus rapide s'il y a beaucoup de doublons.

Pour avoir le nombre de doublons enlevés, il suffit de comparer la taille avant et après.