2009-10-22 3 views
4

Je cherche un conteneur qui fournit une interface std :: map like mais qui conserve l'ordre dans lequel les éléments sont insérés. Comme il n'y aura pas trop d'éléments dans la carte, la performance de recherche n'est pas un gros problème. Le boost::unordered_map fonctionnera-t-il dans ce cas? c'est-à-dire maintient-il l'ordre d'insertion. Je suis nouveau pour dynamiser la bibliothèque et donc vouloir savoir ce que signifie exactement «non ordonné»?boost :: unordered_map maintient l'ordre d'insertion?

+0

Pourquoi ne pas essayer? :) l'expérimentation n'est pas si mauvaise. – LiraNuna

+0

Qu'essayez-vous de faire? Vérifiez ma réponse à cette autre question et voir si elle s'applique: http://stackoverflow.com/questions/1570349/which-stl-container –

+5

@LiraNuna: Parce que cela vous dit juste sur le comportement dans votre mise en œuvre actuelle et non si cette comportement spécifique est nécessaire et peut être invoqué? – sbi

Répondre

9

unordered_map ne maintient pas l'ordre d'insertion. Unordered dans ce cas signifie que l'ordre observable des éléments (c'est-à-dire lorsque vous les énumérez) est non spécifié et arbitraire. En fait, je m'attendrais à ce que l'ordre des éléments dans unordord_map puisse changer pendant la durée de vie de la carte, en raison de resshasage lors du redimensionnement de la carte (cela dépend de l'implémentation)

6

Lorsque j'en avais besoin la dernière fois, j'ai utilisé un std::vector< std::pair<const Key, Value> >. Je n'avais pas besoin d'une grande partie de l'interface std::map donc je ne m'en souciais pas, mais il semble qu'il devrait être assez facile de claquer une interface semblable à une carte autour de cela.

Aussi, assurez-vous de regarder les réponses à this question.

17

En savoir plus sur Boost.Multiindex. Cela vous donne l'opportunité de créer un conteneur qui a à la fois accès aux données par clé (comme std :: map) et accès séquentiel aux données (comme std :: list).

Ceci est un example.