-
Question sur union-set
Bonjour, je suis etudiant en master informatique, et je travaille toujours (je vous avez deja contactez l'année derniere) sur un gros projet informatique necessitant l'utilisation de la STL mais avec de nombreuses contraintes sur la complexité.
De ce fait, j'aimerais savoir si quelqu'un pouvait m'eclairer sur l'union ensembliste "union set" puisque j'ai besoin de cette operation pour faire l'union de deux "list" mais j'aimerais savoir comment cette fonction est implémentée, puisque j'ai pu remarquer que lorsque mes deux listes en entrée etaient triées le resultat (si j'utilise un back-inserter pour la liste en sortie) etait lui aussi trié (quels algorithmes se cachent derriere? serait-ce un tri par fusion ou autre chose?)
De plus j'ai egalement remarquer en cherchant un peu moi meme que si j'entre des listes non triée alors l'union que j'obtiens en resultat n'est plus un union ensembliste mais la concatenation de mes deux listes en entrée.
j'espere avoir etait le moins confus possible, merci d'avance.
-
Salut, et bienvenue sur le forum.
Pour ce que j'en sais, l'algorithme set_union utilise plutot la notion d'équivalence pour travailler.
C'est à dire qu'il ne va pas utiliser l'égalité parfaite ( a == b ) mais bien partir du principe que "si a n'est pas plus petit que b, et que b n'est pas plus petit que a, c'est qu'ils sont équivalents".
Cela peut justifier que, sur des conteneurs non triés, tu puisse obtenir des résultats "aberrants" correspondant à la concaténation des deux conteneurs fournis.
La contrainte est donc claire pour utiliser ce type d'algorithme: il faut impérativement que les deux conteneurs soient triés ;)
Si, de manière générale, tu effectues plus de recherches que d'ajout dans ton conteneur, il peut en outre sembler opportun de te tourner vers un conteneur directement trié, tel que std::set ou std::map, mais là, il faut que tu réfléchisse à la situation réelle dans laquelle tu te trouve ;)