map value an Funktion übergeben!
-
Zuerst einmal hallo an Alle!

Ich möchte mit Hilfe des mappings einen CommandPrompt schreiben, welcher verschiedene Befehle executieren kann.
#include <iostream> #include <string> #include <map> int main() { std::string input; std::map <std::string, int> mymap; std::map<std::string, int>::iterator it; mymap["list"] = 1; mymap["save"] = 2; mymap["quit"] = 3; std::cout <<"Befehl? "; getline(std::cin, input); for (it = mymap.begin(); it != mymap.end(); it++) { if(it->first == input) { return it-> second; } else { std::cout<<"Command not found"<<std::endl; } } }Soweit so gut (das funktioniert auch ^^), aber nun möchte ich, wenn ein passender Eintrag im Container gefunden wurde, den integer Wert einer Funktion execute() übergeben welche dann mit Hilfe eines Switch/Case Statements dann die entsprechenden weiteren Funktionen aufruft!
Dies will mir einfach nicht gelingen!
Wenn ich den it->second Wert einer anderen Variable zuweiße, alsoint key = it->second;und diesen dann übergebe kommt ein Seg Fault!
als ich probiert habe, den it Wert mit Referenz zu übergeben, also
execute(it&->second)funktioniert es auch nicht!
Bitte um Hilfe!

Vielen Dank schon im Vorhinein
trunksen
-
1. Das ist doch wohl nicht dein Ernst, dass du die Map von Hand durchiterierst und alle Einträge vergleichst. Die map ist doch gerade dafür da, dass du das nicht tun musst und stattdessen einfach
mymap[input]schreiben kannst (vorher aber eventuell prüfen, ob der Eintrag auch existiert, sonst wird ein neuer angelegt).
2. Wenn du einen Segfault bekommst, dann wird das entsprechende Element wohl nicht existieren.
-
Hallo!
Vielen Dank für die schnelle Antwort (aber warum der forsche Ton?)!
Das ist doch wohl nicht dein Ernst, dass du die Map von Hand durchiterierst und alle Einträge vergleichst. Die map ist doch gerade dafür da, dass du das nicht tun musst und stattdessen einfach mymap[input] schreiben kannst (vorher aber eventuell prüfen, ob der Eintrag auch existiert, sonst wird ein neuer angelegt).
Das habe ich nicht gewusst, die Beispiele die ich gesehen habe waren meistens mit einer Schleife!
Meine neue Schleife
if(mymap[input]) { int key = mymap[input]; execute(key); }und
void execute(int& key) { std::cout<<key<<std::endl; }Funktioniert wunderbar!
Vielen Dank für den Tipp
!mfg trunksen
-
trunksen schrieb:
if(mymap[input]) { int key = mymap[input]; execute(key); }Ich bezweifle, dass du dir im klaren bist, was das
if (mymap[input])tut. Das funktioniert hier zufällig, hat aber ungewollte Nebeneffekte. Du solltest das mitfindumschreiben.
-
-
Danke, genau so meinte ich es
