2010-09-14 26 views
9

Necesito almacenar cadenas en formato de valor clave. Así que estoy usando Map como a continuación.map <string, string> cómo insertar datos en este mapa?

#include<map> 
using namespace std; 
int main() 
{ 
    map<string, string> m; 
    string s1 = "1"; 
    string v1 = "A"; 

    m.insert(pair<string, string>(s1, v1)); //Error 
} 

Am conseguir a continuación error en la línea de inserción

error C2784: 'std :: bool operador < (const std :: _ árbol < _Traits> &, const std :: _ árbol < _Traits> &)': no ​​se pudo deducir argumento de plantilla para 'const std :: _ árbol < _Traits> &' de 'const std :: string'

Probé la función make_pair también como a continuación, pero eso también informa el mismo error.

m.insert(make_pair(s1, v1)); 

Por favor, hágamelo saber lo que está mal y cuál es la solución para el problema anterior. Después de resolver problema anterior, puedo utilizar, como a continuación para recuperar el valor basado en clave

m.find(s1); 

Respuesta

31

Creo que se pierde un #include <string> en alguna parte.

+0

Esto hizo que el código compilado. Pero me pregunto por qué no dio error cuando dije string s1 = "1"; Solo al llamar a insertar, da error. – bjskishore123

+0

@ bjskishore123: ¿Quizás tengas otra clase cuyo nombre es 'string' que colisiona de alguna manera con' std :: string'? – ereOn

+2

@ereOn - o tal vez ese no es el único error de compilación –

2

Trate m[s1] = v1; lugar.

+0

Esto también da el mismo error. – bjskishore123

+0

Y esto no le permite saber si insertó un nuevo nodo o si actualizó uno ya existente. –

4

Podría intentar esto:

#include<string> 

parece que el compilador no sabe cómo comparar cadenas. Quizás todavía no sepa lo suficiente sobre las cadenas, pero está demasiado concentrado en su map para resolverlo.

+0

¡Oh, interesante! Es el compilador * ella *? De acuerdo, puedo estar de acuerdo en eso. :) - Al igual que nuestra Madre Naturaleza y la Galaxia de Milkyway (en sánscrito: Shi-shu-maa-ra = Ella-delfín). –

1

Creo que tiene que ver con el hecho de que <map> no incluye <string>, pero . Cuando agrega elementos al mapa, necesita buscar la posición correcta en el mapa ordenando. Al ordenar, el mapa intenta localizar el operator <, desde el cual encuentra la ubicación correcta para el nuevo elemento. Sin embargo, no hay operator < para la definición de cadena en , por lo que aparece el mensaje de error.

-2

El s1 es un número entero que espera que pase como una cadena ... ¡¡esa es probablemente la causa principal del error !!

Cuestiones relacionadas