2010-09-14 6 views
9

Ho bisogno di memorizzare stringhe nel formato valore chiave. Quindi sto usando la mappa come di seguito.map <string, string> come inserire i dati in questa mappa?

#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 
} 

sono sempre sotto l'errore alla linea inserto

errore C2784: 'bool std :: operator < (std :: const _ Albero < _Traits> &, std :: const _ Albero < _Traits> &)': non poteva dedurre argomento di template per 'std :: const _ Albero < _Traits> &' da 'const std :: string'

Ho provato anche la funzione make_pair come sotto, ma anche questo riporta lo stesso errore.

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

Pls fatemi sapere cosa c'è che non va e qual è la soluzione per il problema di cui sopra. Dopo aver risolto problema di cui sopra, posso usare come qui sotto per recuperare il valore in base a chiave

m.find(s1); 

risposta

31

Penso che manchi un #include <string> da qualche parte.

+0

Questo ha reso il codice compilato. Ma mi chiedo perché non ha dato errore quando ho detto stringa s1 = "1"; Solo dopo aver chiamato inserisci dà errore. – bjskishore123

+0

@ bjskishore123: Forse hai un'altra classe il cui nome è 'stringa' che in qualche modo si scontra con' std :: string'? – ereOn

+2

@ereOn - o forse non è l'unico errore del compilatore –

2

Prova m[s1] = v1; invece.

+0

Anche questo dà lo stesso errore. – bjskishore123

+0

E questo non ti dà modo di dire se hai inserito un nuovo nodo o aggiornato uno preesistente. –

4

Potrebbe provare questo:

#include<string> 

sembra che il compilatore non sa come confrontare le stringhe. Forse lei non ne sa ancora abbastanza sulle stringhe, ma è troppo concentrata sul tuo map per capire che è fuori ATM.

+0

Oh, interessante! Il compilatore * lei *? Bene, posso essere d'accordo su questo. :) - Proprio come la nostra madre natura e la galassia della Milkyway (in sanscrito: Shi-shu-maa-ra = She-dolphin). –

1

Penso che abbia a che fare con il fatto che <map> non include <string>, ma . Quando si aggiungono elementi alla mappa, è necessario trovare la posizione corretta nella mappa ordinando. Durante l'ordinamento, map tenta di individuare lo operator <, dal quale trova la posizione corretta per il nuovo elemento. Tuttavia, non esiste lo operator < per la definizione di stringa in , quindi viene visualizzato il messaggio di errore.

-2

Il s1 è un intero che si spera passare come stringa ... questa è probabilmente la causa principale dell'errore !!