Frage zu verschachtelter Map
-
Ich habe folgenden Quellcode:
typedef map<string, map<string, string> > TYPE; TYPE meinObjekt; //... for (TYPE::iterator i=meinObjekt.begin (); i!=meinObjekt.end (); i++) { cout<<i->first<<'\n'; //Problem: for (/*???*/::iterator k=i->second.begin (); k!=i->second.end (); k++) cout<<k->first<<' '<<k->second<<'\n'; }Frage: Wie schreibe ich in Zeile 12 den Typ von k hin, ohne explizit
map<string, string>::iteratorschreiben zu müssen? (Denn TYPE ist ja ein typedef und demnach wäre es kein guter Stil, nochmal dessen inneren Typ explizit anzugeben.)
Muß ich dafür gleich am Anfang
typedef map<string, string> INNER_TYPE; typedef map<string, INNER_TYPE> TYPE;schreiben, um dann die Variable k mit
INNER_TYPE::iterator kdeklarieren zu können oder gibt es eine saubere Lösung, bei der ich auf diese zusätzliche Deklaration des INNER_TYPEs verzichten kann und den Iteratortyp direkt aus der Variable i herausbekomme?
-
TYPE::data_type::iterator
-
Danke. Aber obwohl es auch auf der Seite so steht, war der richtige Typ eigentlich mapped_type und nicht data_type, zumindest beim G++. Weiß einer, warum auf dieser Seite etwas von data_type geschrieben steht?
-
Andere Implementierung, weis nicht ob der Standard da was vorschreibt
G++ --> http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/classstd_1_1map.html
-
STL != Standardlib.
Aber auf mich hört ja keiner.

STL ist nur im Volksmund die Standardlib. Akademisch gesehen aber falsch. Zahnspange ist auch im Volksmund ein Begriff, aber jeder Zahntechniker hält sich bei diesem Begriff seine Hände auf den Kopf.

Also, immer in eine Std-Lib-Doku schauen.
-
Sorry mein Fehler, aber die sgi Seite ist halt so schön übersichtlich, und die meisten Sachen sind gleich.
-
STL != Standardlib.
Ist das hier überhaupt wichtig? Also, wenn ich beim GCC/MinGW
#include <map>aufrufe, dann macht der intern im wesentlichen bloß folgendes:
#include <bits/stl_map.h>Wo also besteht der Unterschied zwischen der Standard-map und der STL-map? Ich dachte bisher immer, die STL wäre ein Teil der Standardbibliothek.
-
Nein. Große Teile der STL wurden in die Standardbibliothek übernommen. Das macht die STL aber noch nicht vollständig zu einem Teil selbiger.