8
votes

Initialiser une taille de la carte STL

est-il possible d'initialiser une carte STL mappe taille?

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.


2 commentaires

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.


4 Réponses :


4
votes

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.

cependant , vous peut

  • 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

  • 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)


0 commentaires

0
votes

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()))


1 commentaires

C'est pour std :: nonOrdered_map <> , pas std :: map <> .



1
votes

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 avec la taille dont vous avez besoin et donner à ses itérateurs au constructeur.


0 commentaires

6
votes

Il existe plusieurs options:


0 commentaires