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
- 1. en utilisant std :: find_if avec std :: string
- 2. std :: tri sans foncteurs
- 3. Tri std :: liste de pointeurs
- 4. Ajout d'une structure à std :: list
- 5. std :: list itérateur: get next element
- 6. Est-il possible (ou ok) d'avoir une liste std :: list de std :: list?
- 7. En utilisant std personnalisé :: comparateur mis
- 8. Iterate std :: list <boost :: variant>
- 9. std :: trier sur std :: vector <std::string>
- 10. en utilisant de std :: accumuler
- 11. Pointeur pour l'item en itération sur std :: list
- 12. Comment initialiser un comparateur std :: set?
- 13. Iterate et effacer elments de std :: set
- 14. Comment construire un itérateur std :: list en boucle avec incrément
- 15. std :: list <> :: sort est-il stable?
- 16. Comment implémenter std :: set ou std :: hash_set pour filtrer l'élément dupliqué dans une liste de tableaux?
- 17. en utilisant std :: sort avec boost :: bind
- 18. Segmentation fault en fonction std std :: _ Rb_tree_rebalance_for_erase()
- 19. Comment convertir le pointeur vC++ (ex: IListPtr) en std :: list?
- 20. Existe-t-il un équivalent de std :: set en C#?
- 21. Erreur dans std :: list :: tri avec comparateur personnalisé (expression primaire attendue avant le jeton ')'
- 22. problème avec std :: avance sur std :: ensembles
- 23. std :: vecteur de std :: fonction
- 24. Comment dire à std :: set de 'rafraîchir' sa commande?
- 25. std :: back_inserter pour un ensemble std ::?
- 26. Comparateur personnalisé via un constructeur explicite pour trier std :: set
- 27. Maintenir un std :: set <boost :: shared_ptr>
- 28. Implémentation des événements de lecture/écriture des objets std :: list
- 29. Différence: std :: runtime_error vs std :: exception()
- 30. Supprimer des éléments avec une valeur spécifique de std :: list
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