Ho bisogno di una std: struttura dati della mappa che è di sola lettura, il che significa che devo riempirla una volta con i dati e quindi leggere solo quei valori, non cambiarli mai o aggiungerne di nuovi.Come creare una std :: mappa di valori costanti che è ancora accessibile dall'operatore []?
La mia versione non-const assomiglia a questo:
//in .h
#include <string>
#include <map>
std::map<std::string, int> myMap;
void initMap();
//in .cpp
#include "foo.h"
void initMap() {
myMap["Keys"] = 42;
}
Poi io chiamerei initMap()
una volta nel mio codice e sia fatta.
Ora ho già letto diverse domande qui e sembra non banale raggiungere la costanza per la mappa.
Facendolo diventare un std::map<std::string, const int>
non mi consente di riempirlo nello initMap()
. Il riempimento con un temp non costante e il costruttore di copie sulla definizione non funziona, in quanto il costruttore di copie non accetta facilmente la versione non const come input.
Facendolo diventare un const std::map<std::string, int>
(che potrei riempire con una copia non costante durante la definizione) disabiliterebbe l'uso dell'operatore []
per l'accesso ai valori.
Quindi c'è un modo per raggiungere (valore) constinità e inizializzare la struttura (preferibilmente nel file di intestazione)?
BTW: Né C++ 0x né C++ 11 né boost::
è un'opzione.
Vuoi "una std: struttura dati mappa di sola lettura" oppure vuoi una mappa con elementi di sola lettura? – juanchopanza
Voglio il primo, ma posso vivere con il successivo se questo mi tiene l'operatore '[]'. –