Supprimer les doublons d'un tableau de chaines

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 30 juil. 2013 à 12:34
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 30 juil. 2013 à 12:34
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 30/07/2013 à 12:36
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.
Rejoignez-nous