std::map innerhalb einer std::map möglich?
-
Hallo,
ist es möglich innerhalb einer std::map eine weitere std::map zu installieren?std::map<std::string, std::string> StringList; std::map<std::string, StringList> MsgMap;Im Prinzip hab ich einen Key nach dem ich Suchen möchte, der auch eindeutig ist; allerdings besitzt dieser Key auch ein bis fünf Subkeys.
z.B. Key = Tasche --> Subkeys = Ledertasche, Stofftasche etc. Jeder Subkey besitzt natürlich noch einen entsprechenden Wert.
Vielleicht gibt es auch interessante Alternativen. Die Anzahl der Subkeys ist unterschiedlich.
<key1> <subkey1><value> <subkey2><value> <key2> <subkey1><value> <subkey2><value> <subkey3><value> <key3> <subkey1><value>Des Weiteren gleich noch eine zweite Frage: wenn ich nach dem Key suche, würde ich ja wenn es mit zwei std::maps geht, die "innere" std::map mit den Subkeys erhalten. Kann ich mich durch diese "Liste" entsprechend durchbewegen oder muss ich stets den richtigen Subkey aufrufen, um an den Wert zu kommen?
Gruß
Patrick
-
Ja, geht beides. Warum hast du es nicht einfach ausprobiert? - Eine map verschachteln geht genau gleich wie bei jedem anderen Typen auch und durch eine map iterieren geht auch. Das siehst du daran, dass es iteratoren dafür anbietet.
Siehe hier:
http://www.cplusplus.com/reference/stl/map/
-
drakon schrieb:
Ja, geht beides. Warum hast du es nicht einfach ausprobiert? - Eine map verschachteln geht genau gleich wie bei jedem anderen Typen auch und durch eine map iterieren geht auch. Das siehst du daran, dass es iteratoren dafür anbietet.
Siehe hier:
http://www.cplusplus.com/reference/stl/map/Eine Frage ist dennoch geblieben - wie kann man bei einer Iteration den Endpoint setzen? So dass man eine std::map nur von A bis C durchsucht?
std::map<CString, std::map<CString, CString>>::const_iterator itr2 = XmlNodes2.find(_T("Start")); for(itr2 = XmlNodes2.begin(); itr2 != XmlNodes2.end(); ++itr2) { CString substring = (*itr2).first; }<key1> <subkey1><value> <subkey2><value> <key2>In meinem Beispiel möchte ich z.B. nur die beiden Subkeys von key1 durchsuchen. Key1 entspricht dem "Start" von itr2.
-
Indem du dir einen Iterator auf dieses Element holst und dann nicht bist
XmlNodes2.end()gehst, sondern eben bis zu diesem Iterator.btw:
Schau dir mal typedefs an. Die machen das ganze einiges lesbarer.
-
drakon schrieb:
Indem du dir einen Iterator auf dieses Element holst und dann nicht bist
XmlNodes2.end()gehst, sondern eben bis zu diesem Iterator.btw:
Schau dir mal typedefs an. Die machen das ganze einiges lesbarer.Danke für den Tipp mit den Typedefs. Leider hab ich es noch nicht ganz verstanden mit der for-Schleife#
typedef std::map<CString, std::map<CString, CString>>::const_iterator iterator; iterator itr2 = XmlNodes2.find(_T("Start")); iterator itr3 = XmlNodes2.find(_T("End")); for(itr2; itr2 != itr3; ++itr2) { CString substring = (*itr2).first; }Auf welchen Wert muss ich itr2 in der for-Schleife zu Beginn setzen? Bis jetzt wird die for-Schleife nicht ausgeführt sondern einfach übersprungen.
-
hat irgendwie vorher nicht funktioniert; jetzt geht es...