J'ajoute deux éléments différents à la fois std :: list et std :: set et je veux que la liste std :: soit triée avec le même ordre que std: :ensemble. une façon que j'ai essayée est quand l'élément est ajouté à std :: set, trouve cet élément alors obtiens l'index de cet élément en utilisant std :: distance (begin, found) et puis insère l'élément à cet index dans std :: list. Est-ce qu'il y a un autre moyen?Tri std :: list en utilisant std :: set
Répondre
Vous devez utiliser le std::map, avec les données que vous avez placées dans l'ensemble en tant que clé, et les données que vous mettez dans la liste en tant que valeur.
De cette façon, vos éléments de liste seront commandés.
C'est trop compliqué! En fait, std :: set est implémenté en tant qu'arborescence binaire et utilise std :: less pour le tri (par défaut). Aussi, cela fournit un itérateur "stable", cela signifie que l'itérateur retourné par std :: set :: insert sera valide jusqu'à ce que l'élément soit explicitement effacé. Vous pouvez donc simplement placer l'itérateur inséré dans std :: list. Et le verset sage - std :: list a aussi un itérateur stable, donc vous pouvez mettre des éléments à lister mais placer des itérateurs à définir. En dernier lieu, il suffit de surcharger std :: less
Pourquoi essayez-vous de faire cela? Il peut y avoir une meilleure solution globale à votre problème plutôt que de trouver un moyen de conserver une liste et un ensemble synchronisés. – Patrick
gardez juste le std :: set et quand vous avez besoin de la std :: list vous le créez à partir de std :: set. – fabrizioM
std :: set contient une 'clé' et std :: list contient une valeur liée à la clé. Dans ce cas, je pense que l'utilisation de std :: map serait une meilleure idée. – cpx