Ich brauche eine std: map Datenstruktur, die nur gelesen wird, was bedeutet, ich muss es einmal mit Daten füllen und dann nur diese Werte lesen, nie ändern oder zusätzliche hinzufügen.Wie erstellt man eine std :: map von konstanten Werten, auf die der Operator [] noch zugreifen kann?
Meine Nicht-const-Version sieht wie folgt aus:
//in .h
#include <string>
#include <map>
std::map<std::string, int> myMap;
void initMap();
//in .cpp
#include "foo.h"
void initMap() {
myMap["Keys"] = 42;
}
Dann würde ich initMap()
einmal in meinem Code aufrufen und durchgeführt werden.
Jetzt habe ich schon einige Fragen hier gelesen und es scheint nicht-trivial zu sein, um Const-ness für die Karte zu erreichen.
Making it a std::map<std::string, const int>
wird es mir nicht erlauben, es in der initMap()
zu füllen. Füllen Sie es mit einem nicht-Konst-Temp und der Kopierkonstruktor für die Definition funktioniert auch nicht, da der Copy-Konstruktor nicht leicht die nicht-const-Version als Eingabe nimmt.
Es const std::map<std::string, int>
machen (die ich mit einer nicht-const-Kopie während der Definition füllen konnte) würde die Verwendung des []
-Operators für den Wert-Zugriff deaktivieren.
Also gibt es eine Möglichkeit, (Wert) Const-Ness zu erreichen und die Struktur zu initialisieren (vorzugsweise in der Header-Datei)?
BTW: Weder C++ 0x noch C++ 11 noch boost::
ist eine Option.
Möchten Sie "eine std: Kartendatenstruktur, die schreibgeschützt ist", oder möchten Sie eine Karte mit schreibgeschützten Elementen? – juanchopanza
Ich will das ehemalige, aber ich kann mit dem späteren leben, wenn dies mich den '[]' Operator hält. –