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>::iterator
    

    schreiben 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 k
    

    deklarieren 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
    

    http://www.sgi.com/tech/stl/Map.html



  • 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.


Anmelden zum Antworten