2017-08-25 2 views
-2

Ich A vom Typ map<string, int> und string s in meinem Programm unter Verwendung einer Variablen:Warum hätte ich einen Fehler kompilieren müssen, wenn ich eine STL-Map verwende?

map<string, int> A; 
A["X"] = 10; 
string s = "LXX"; 
int ans += A[s[2]]; 

, aber wenn ich den Code ausführen, kompilieren Fehler kommt:

no match for 'operator[]' (operand types are 'std::map<std::__cxx11::basic_string<char>, int>' and '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}')

ein Zeichen in String wie s[2] kann kein Index einer Karte sein? Wie sollte ich es richtig benutzen, um das zu bekommen (A[s[2]])?

+2

Wenn Sie unsere Hilfe mit Ihrem Problem wollen, dann sollten Sie zunächst erstellen [Minimal, vollständig und prüfbare Beispiel] (http://stackoverflow.com/help/mcve) Das zeigt das Problem. Bearbeiten Sie dann Ihre Frage, um dieses Beispiel einzuschließen (mit einem Kommentar zu der Zeile, die den Fehler verursacht), und die * Complete * -Ausgabe des Compilers, einschließlich möglicher Informationsnotizen. Auch bitte [lesen Sie, wie man gute Fragen stellt] (http://stackoverflow.com/help/how-to-ask). –

+1

fehlender Kontext aus Ihrem Programm ... aber ich nehme an, dass Sie den Int durch die Zeichenkette abbilden, richtig? Also sollte nur A [s] dein Int bekommen. – BeerBaron

+1

's [i]' ist ein 'char', nicht ein' std :: string', also haben Sie einen Typ, der nicht übereinstimmt. – hnefatl

Antwort

0

Wenn Sie [] Operator auf Zeichenfolge verwenden, erhalten Sie eine char richtig?

Der Schlüssel Ihrer Karte ist std::string, während Sie eine char übergeben, die nicht kompatibel sind.

Was Sie tun müssen, ist einen gültigen Schlüssel übergeben ->std::string, um int gemappt zu werden.

map<string, int> m; 
std::string s("test"); 

m[s] = 10; 

if (m.find(s) == m.end()) 
{ 
    // not found 
} else 
{ 
    // found 
} 

Wenn Sie Zeichen zur Karte würden Ihre std::string Sie haben Erklärung Ihrer Karte std::map<char, int> ändern oder eine Zeichenkette mit 2 Zeichen bestehen. (Eines davon ist null Abschlusszeichen)

A[std::string(s[i])] ---> 'c' to "c\0" 
0

Wenn Sie Zeichen von der string zu einer int zuordnen, versuchen Sie, die map<string, int> zu map<char, int> zu ändern. Versuchen Sie den Zugriff mit A[s], wenn Sie string zu int zuordnen.

Verwandte Themen