2012-05-22 24 views
31

Tengo un mapa a saber valueMapObtener el valor del mapa

typedef std::map<std::string, std::string>MAP; 
MAP valueMap; 
... 
//Entering data 

Entonces estoy pasando este mapa a una función por referencia

void function(const MAP &map) 
{ 
    std::string value = map["string"]; 
    // by doing so i am getting error. 
} 

¿Cómo puedo obtener el valor del mapa, que es pasó como una referencia a una función?

+12

Al exponer sobre un error que se obtiene, siempre se debe incluir el error real en la pregunta. –

+2

bien. Yo me ocuparé de esto. Gracias –

Respuesta

53

Desafortunadamente std::map::operator[] es una función de miembro no const, y usted tiene una referencia constante.

o hay que hacer cambiar la firma de function o DO:

MAP::const_iterator pos = map.find("string"); 
if (pos == map.end()) { 
    //handle the error 
} else { 
    std::string value = pos->second; 
    ... 
} 

operator[] controla el error mediante la adición de un valor predeterminado-construyó el mapa y devolver una referencia a él. Esto no sirve de nada cuando todo lo que tienes es una referencia constante, por lo que tendrás que hacer algo diferente.

Usted podría ignorar la posibilidad y escribir string value = map.find("string")->second;, si la lógica del programa de alguna manera garantiza que "string" ya es una clave. El problema obvio es que si estás equivocado, obtienes un comportamiento indefinido.

+1

usa 'MAP :: const_iterator' como' auto' si tu compilador aún no admite 'auto'. – smerlin

+0

no debería ser 'std :: string value = pos-> second;' o 'const std :: string & value = pos-> second;'? – smerlin

+0

@smerlin: buen punto, arreglado. Si el que pregunta realmente necesita una copia del valor, o podría usar una referencia constante, depende del código que no se muestra. Así que decidí no molestarme con eso :-) –

Cuestiones relacionadas