est-il possible d'initialiser une carte STL Je sais combien d'éléments seront dans ma carte à la fin et je souhaite allouer toute la mémoire requise au tout début. P> mappe code> taille? p>
4 Réponses :
Vous ne pouvez pas. C'est un arbre (généralement un arbre rouge-noir). Les valeurs réelles vont déterminer la mise en page de la mémoire. P>
cependant fort>, vous peut em> fort> p> p>
Utilisez boost Infrusflus cartes ( Quels éléments d'utilisation vous avez alloués dans un autre conteneur, comme un vecteur), décoré de «crochets» pour implémenter la fonctionnalité de la carte sur elle p> li>
Utilisez std :: Carte avec tous les allocateurs, vous pouvez donc allouer tous les éléments réels d'un «piscine» fixe (région de mémoire) p> li>
ul>
réserve code> peut être émulé par
REVASH code> comme dans le tableau 103 dans N3376 .
a.rehash(n)
Post: a.bucket_count() > a.size() / a.max_load_factor()
and a.bucket_count() >= n.
a.reserve(n) Same as a.rehash(ceil(n / a.max_load_factor()))
C'est pour std :: nonOrdered_map <> code>, pas
std :: map <> code>.
La seule chose à laquelle je peux penser est d'utiliser ses constructeurs d'itérateurs. Le seul tour est que vous devez alors créer un autre conteneur em> avec la taille dont vous avez besoin et donner à ses itérateurs au constructeur. P>
Il existe plusieurs options: p>
Vous pouvez essayer d'utiliser la carte avec l'allocator Stateful. Par exemple, de boost.container < / a> ou de C ++ 11. Ou si vous acceptez des limitations d'allocateurs non étatiques, vous pouvez même utiliser la carte de C ++ 98/03. P> Li>
Considérez-vous à utiliser UNOMéroped_map (à nouveau à partir de Boost ou à partir de C ++ 11) - il prend des godets comptez comme paramètre constructeur. Il diffère de la carte, en ce sens qu'elle est basée sur le hachage plutôt que sur une forte commande stricte. P> li>
Une autre option est plat_map de Boost . Il a Boost.Container Flat_ [multif] Les conteneurs sont des conteneurs associatifs à base de vecteur de vecteur basé sur les directives d'Austern et Alexandrescu P>
blockQuote>
Quel choix est meilleur - dépend de vos habitudes d'utilisation. P>
Quel modèle d'utilisation avez-vous? Avez-vous des suppressions? Ou ce n'est que le premier remplissage, puis l'utilisation sans changement?
J'ai besoin d'initialiser avec les zéros, puis d'incrémenter.