Wie erstelle ich eine std :: map mit konstanten Werten, auf die der Operator [] noch zugreifen kann?

Ich benötige eine std: map-Datenstruktur, die nur lesbar ist. Das heißt, ich muss sie einmal mit Daten füllen und dann nur diese Werte lesen, sie nie ändern oder zusätzliche hinzufügen.

Meine Nicht-Const-Version sieht folgendermaßen 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 anrufeninitMap() einmal in meinem Code und fertig.

Jetzt habe ich hier schon einige Fragen gelesen und es scheint nicht trivial zu sein, Konstanz für die Karte zu erreichen.

Machen Sie es einstd::map<std::string, const int> Ich werde es nicht zulassen, das auszufülleninitMap(). Das Füllen mit einem nicht konstanten Temp und dem Kopierkonstruktor bei der Definition funktioniert auch nicht, da der Kopierkonstruktor die nicht konstante Version nicht einfach als Eingabe verwendet.

Machen Sie es einconst std::map<std::string, int> (die ich während der Definition mit einer nicht konstanten Kopie füllen könnte) würde die Verwendung der deaktivieren[] Operator für den Wertezugriff.

Gibt es also eine Möglichkeit, eine (Wert-) Konstanz zu erreichen und die Struktur zu initialisieren (vorzugsweise in der Header-Datei)?

Übrigens: Weder C ++ 0x noch C ++ 11 nochboost:: ist eine Option.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage