Undefinierter Integer [gelöst]
-
@Richard_Wunsch So wie du das jetzt hast, wird als Wert der inneren Map das Ergebnis von x + y gespeichert. Das ist in dem Fall aber sogar, da x und y nicht initialisiert sind, undefiniert.
Um die Formel zu speichern, musst du eine Funktion in der Map speichern. Das machst du wahlweise über Funktionspointer bzw. std::function. Wahlweise könntest du das wohl auch über Funktoren hinbekommen.
Verwenden denn alle Formeln nur x und y oder auch noch andere Parameter?Oder wiederum verstehe ich dich komplett falsch und die willst die Formel einfach als String speichern, um sie auszugeben?
-
@Unterfliege Ok, initalisieren habe ich gelöst. Waren ein paar Klammern zu wenig...
#include <map> #include <string> #include <iostream> int foo (int x, int y){ return (x+y); } int main(){ std::map <std::string, std::map <int,int>> test = {{"test",{{1,foo(1,1)}}}}; }
Das eigentliche Ziel ist es, einen Werte (erster integer) einzulesen, einer vordefinierten Kategorie zuzuweisen (string) und dann in die Rechnung (zweiter integer) mit einzubinden. Also quasi so etwas:
["Kategorie"] = [x+y] - [eingelesener Wert]
Edit: Wichtig dabei ist, dass wenn kein Wert eingelesen wird, die gesamte Kategorie undefiniert bleibt.
-
@Richard_Wunsch sagte in 3d map initialisieren:
Das eigentliche Ziel ist es,
Habe die Erklärung leider nicht verstanden.
Jetzt hast du eine Datenstruktur, die so aussieht:
"Kategorie" => ( 1 => 2)
Insbesondere ist mir die innere map von int auf int nicht klar. Damit speicherst du eine Zuordnung von Zahlen auf Zahlen, also hier in deinem Beispiel von 1 auf 2. D.h. das "foo" wird nicht in der map gespeichert, sondern nur das Ergebnis von foo.
-
Ah ja, das macht natürlich Sinn. Danke für die Veranschaulichung!
#include <map> #include <string> #include <iostream> int foo (int x, int y){ return (x+y); } int main() { int y; std::cin >> y; std::map <std::string, int> test = {{"test", foo(1,2)-y}}; }
So ist es jetzt aber "Kategorie" => Rechnung - eingegebener Wert, richtig?
-
@Richard_Wunsch Jein.
Jetzt ist es:
"Kategorie" => Ergebnis
Aus deinem Ergebnis kannst du aber natürlich nicht mehr ursprüngliche Eingabe und deine Formel ableiten. Ich weiß natürlich nicht, ob das dein Ziel ist.