Es gibt mehrere Möglichkeiten:
Sie können versuchen, eine Karte mit einem State Allocator zu verwenden. Zum Beispiel von Boost.Container oder von C ++ 11. Oder wenn Sie Einschränkungen von nicht-zustandigen Allokatoren akzeptieren, können Sie sogar die Karte aus C ++ 98/03 verwenden.
Erwägen Sie, unordered_map (wieder von Boost oder von C ++ 11) zu verwenden - es dauert Eimer zählen als Konstruktor Parameter. Es unterscheidet sich von der Karte dadurch, dass es auf Hashing und nicht auf strikt schwacher Ordnung basiert.
Eine weitere Option ist flat_map von Boost . Es hat reserve Member-Funktion. Beschreibung der flachen Karte / Menge:
Boost.Container flat_ [multi] map / set-Container sind geordnete vektorbasierte assoziative Container, die auf den Richtlinien von Austern und Alexandrescu basieren.
Welche Wahl besser ist - hängt von Ihren Nutzungsmustern ab.
Sie können nicht. Es ist ein Baum (normalerweise ein rot-schwarzer Baum). Die tatsächlichen Werte bestimmen das Speicherlayout.
Allerdings können Sie
Verwenden Sie Boost Intrusive Maps (die von Ihnen zugewiesene Elemente verwenden) in einem anderen Container, wie ein Vektor), mit 'Haken' dekoriert, um die Kartenfunktionalität darüber zu implementieren
verwenden Sie std :: map mit Zuweisungsmitteln, damit Sie alle tatsächlichen Elemente aus einem festen 'Pool' (Speicherbereich) zuordnen können
Das einzige, was mir einfällt, ist die Verwendung seiner Iterator-Konstruktoren. Der einzige Trick besteht darin, dass Sie dann einen anderen Container mit der benötigten Größe erstellen müssen und seine Iteratoren dem Konstruktor geben müssen.