2010-01-22 8 views
0

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

+5

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

+0

gardez juste le std :: set et quand vous avez besoin de la std :: list vous le créez à partir de std :: set. – fabrizioM

+0

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

Répondre

4

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.

0

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

Questions connexes