Suche nach einem passenden 'Container'
-
Hallo,
ich wage die ersten Schritte in C++ und will eine bereits in Python formulierte Modellsteuerung in C++ umschreiben.
Nun suche ich ein Äquivalent zu Python Dictionarys.Wenn ich es richtig verstanden habe, können 'map' Container mit einem Schlüsselwort ausgestattet, auf unterschiedliche Datentypen verweisen, die im map enthalten sind.
Leider schaffe ich es nicht, das 'list' oder 'map' selber Elemente einer 'map' sind.Meine Frage: geht dies prinzipiell nicht oder mache ich etwas falsch?
Vielleicht ist es ja auch nicht der geeigbnete Datentyp?In Python würde ein ein Dictionary wie folgt aussehen:
a_dic = {"namen":{"person_1": "fritz, "person_2":"klaus"},"alter":{"person_1":18,"person_2":26}}Ich weise also einem Bezeichner, hier im Beispiel 'namen' und 'alter' wieder Dictionarys zu. Diese können dann beliebige Datentypen enthalten. z.B. Listen der Form [1,32,22,...]
Für Hilfe bin ich dankbar
Grüße
Fragus
-
Initialisieren lässt sich das in C++ nicht so schnell, aber du kannst ganz leicht so ein Dictionary bauen:
#include <map> #include <string> using namespace std; // in c++ baust du für Person eine struct, op< ist für sortierung in der map notwendig: struct Person { string name; int age; Person(string name, int age) : name(name), age(age) {} friend boolean operator< ( const Person& lhs, const Person& rhs ); }; boolean operator< (const Person& lhs, const Person& rhs) { // sorts asc by age return lhs.age < rhs.age; } map<string, Person> personen; personen["person_1"] = Person( "Fritz", 18 );Du kannst natürlich jetzt auch der struct beliebig list oder anderes hinzufügen.
Zweidimensionale Maps wären aber auch möglich:
typedef map<string, map<string, string> > MyMap; MyMap my_map;Hast jetzt die Möglichkeit einem String wieder als Value eine Map zuzuweisen.
MfG SideWinder
-
fragus schrieb:
Wenn ich es richtig verstanden habe, können 'map' Container mit einem Schlüsselwort ausgestattet, auf unterschiedliche Datentypen verweisen, die im map enthalten sind.
ne, unterschiedliche datentypen gleichzeitig: das geht nich. höchstens polymorphe zeiger.
Leider schaffe ich es nicht, das 'list' oder 'map' selber Elemente einer 'map' sind.
container< myKeyType , list<myValue> >
das sollte imho für die assoziativen container ganz gut gehen, dann hast du zB eine map mit schlüsseln deines typs, die irgendwelche listen identifizieren...edit: jaja, wieder mal bin ich zu spät...
