Wie kann ich die Iteration über eine STL-Karte in eine STL-map?
Habe ich eine STL-map-definition wie folgt:
map<string, map<int, string> > info;
Ich Durchlaufen, die Karte mit dem folgenden code:
for( map<string, map<int, string> >::iterator ii=info.begin(); ii!=info.end(); ++ii){
for(map<int, string>::iterator j=ii->second.begin(); j!=ii->second.end();++j){
cout << (*ii).first << " : " << (*j).first << " : "<< (*j).second << endl;
}
}
Ist dies die richtige Art und Weise zu Durchlaufen, oder gibt es eine bessere Möglichkeit, dies zu tun? Der obige code funktioniert für mich, aber ich bin auf der Suche nach einer eleganten Lösung.
- Tatsächlich Iteration über alle Einträge der äußeren anzeigen und alle inneren Landkarten als gut, es gibt keine "bessere" Lösung würde ich sagen. Zwei geschachtelte Schleifen, kein problem.
- Als Nebeneffekt der Frage in Bezug auf Eleganz, was falsch mit der
->
Betreiber? - es ist nichts falsch oder unelegent über das code.. es ist nur so, dass ich thot gibt es vielleicht einen besseren Weg...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist korrekt, es fehlen lediglich noch ein paar
typedef
und Lesbarkeit Verbesserungen :Wenn C++11 verfügbar ist, können Sie verwenden range
for
Schleife:Wenn nur C++11
auto
verfügbar ist:Nicht, wenn Sie die BOOST-es ist BOOST_FOREACH:
Während es ist nicht klar, welches problem Sie lösen, indem er eine Karte innerhalb einer Karte, ich glaube nicht, dass es einen besseren Weg, die Iteration über alle Elemente ohne Verwendung dieser Iteratoren. Die einzige Sache, die Sie tun können, zu verbessern die Lesbarkeit des Codes ist die Verwendung von Typdefinitionen auf die template-Typen.
Allerdings wird es nicht eine bessere Idee, um zu definieren, Ihre
map
alsmultimap <string, MyClass>
wo
MyClass
ist definiert als ein paar von integer-und eine string sowie eine toString () - Methode schreibt den Inhalt, etc?Wenn c++11 verfügbar ist, können wir die stl-Algorithmus for_each-und lambda-Funktionen, um eine elegante Lösung
//Durchlaufen der map-Objekt jetzt
Wenn Sie möchten, Durchlaufen beide Karten, dann die Art und Weise Sie präsentiert wird, ist der beste Weg. Nun, wenn gibt es etwas bestimmtes, das Sie tun möchten, dann werden Sie vielleicht besser mit Hilfe einer Funktion aus Algorithmus header.
Wenn Sie Zugang zu C++11 Funktionen, dann range-basierte for-Schleifen, wie vorgeschlagen, Juraj Blaho Antwort scheinen die meisten lesbar option für mich. Allerdings, wenn C++17 für Sie verfügbar ist, dann können Sie strukturierte Bindungen zusammen mit den loops zur weiteren Erhöhung der Lesbarkeit, wie Sie können loszuwerden, alle
first
undsecond
Mitglieder:Code auf Coliru