Wie kann ich einen Wert aus einer Karte?
Ich habe eine map
namens valueMap
wie folgt:
typedef std::map<std::string, std::string>MAP;
MAP valueMap;
...
//Entering data.
Dann bin ich der Weitergabe dieser Karte an eine Funktion per Referenz:
void function(const MAP &map)
{
std::string value = map["string"];
//By doing so I am getting an error.
}
Wie bekomme ich den Wert aus der Karte, die übergeben wird, als eine Referenz auf eine Funktion?
- Bei der Buchung über eine Fehlermeldung, die Sie erhalten, sollten Sie immer auch die tatsächlichen Fehler in der Frage.
- ok. Ich werde mich darum kümmern. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider
std::map::operator[]
ist eine non-const-member-Funktion, und Sie müssen eine const-Referenz.Müssen Sie entweder ändern Sie die Signatur der
function
oder tun:operator[]
behandelt den Fehler durch Angabe eines default-konstruiert Wert auf der Karte und die Rückgabe einer Referenz auf sich. Dies ist kein Einsatz, wenn alle Sie haben, ist eine const-Referenz, so dass Sie brauchen, um etwas anders zu machen.Du könnte ignorieren, die Möglichkeit und schreiben
string value = map.find("string")->second;
wenn Ihr Programm Logik irgendwie garantiert, dass"string"
ist schon ein Schlüssel. Das offensichtliche problem ist, dass wenn du falsch liegst, dann bekommst du Undefiniertes Verhalten.MAP::const_iterator
inteadauto
wenn Ihr compiler nicht unterstütztauto
noch.std::string value = pos->second;
oderconst std::string& value = pos->second;
?Karte.bei("Schlüssel") wirft eine Ausnahme, wenn Schlüssel fehlt
http://www.cplusplus.com/reference/map/map/at/
Den Antwort von Steve Jessop erklärt auch, warum Sie nicht verwenden können
std::map::operator[]
auf eineconst std::map
. Gabe Rainbow ' s Antwort schlägt eine schöne alternative. Ich möchte nur, um Ihnen einige Beispiel-code, wiemap::at()
. So, hier ist ein verbessertes Beispiel desfunction()
:Und hier ist ein Beispiel
main()
Funktion:Ausgabe:
Code auf Ideone
Gut, Sie können übergeben Sie es als Referenz. Die standard-Referenz-wrapper ist.
Und den test.
Ich denke, das ist nett und einfach. Genießen Sie ...