std::map mit 3 Elementen



  • Hallo,
    mit

    map<int, pair<string, string> >m;
    

    erstelle ich eine map mit 3 Elementen.
    Nun möchte ich nach einem key suchen, z. B. "3".
    Folgender Iterator arbeitet nicht:

    map<int, <string, string>>::iterator it;
    

    Einträge nehme ich vor mit

    m.insert(make_pair(1, make_pair("Haus", "house")));
    

    Doch da ich den iterator nicht festlegen kann, kann ich auch nicht nach einem key suchen und mir die dazugehörigen values ausgeben lassen.
    Mein Compiler verarbeitet übrigens nur den alten C++ Standard bis 2010.



  • <string, string>
    

    .. da fehlt das pair

    Edit: 'arbeitet nicht ist eine irreführende Fehlerbeschreibung. Compiliert nicht, mit der entsprechenden Meldung des Compilers, würde ev. mehr Leute motivieren dir zu helfen.



  • Diese Alternative hatte ich schon probiert. Wenn ich es wie vorgeschlagen abändere:

    map<int, pair<string, string>>::iterator it;
    

    erhalte ich folgende Fehlermeldungen:

    [C++ Warnung] Unit1.cpp(18): W8052 Basisinitialisierung ohne einen Klassennamen ist nun veraltet
    [C++ Fehler] Unit1.cpp(18): E2188 Ausdruckssyntax
    [C++ Fehler] Unit1.cpp(18): E2299 Template-Spezialisierung kann aus 'pair<_T1,_T2>' nicht generiert werden
    


  • @Ingo sagte in std::map mit 3 Elementen:

    Mein Compiler verarbeitet übrigens nur den alten C++ Standard bis 2010.

    Dann kann er noch nicht die direkt verschachtelten Template-Klammern erkennen, es muß ein Leerzeichen dazwischen (wie in deinem ersten Beitrag):

    map<int, pair<string, string> >::iterator it;
    

    Noch besser ist jedoch, du erzeugst dir einen Aliasnamen:

    typedef map<int, pair<string, string> > MyMap; // ab C++11 würde man 'using' verwenden
    

    und verwendest den dann:

    MyMap::iterator it;
    


  • Das typedef wird vom Compiler nun angenommen:

    typedef map<int, pair<string, string> > m; 
    m::iterator it;
    

    Allerdings verweigert er jetzt das insert:

    m.insert(make_pair(1, make_pair("Haus", "house")));
    

    mit der Fehlermeldung:

    [C++ Fehler] Unit1.cpp(40): E2108 Ungültige Verwendung von typedef 'm'
    


  • Du hast mit Typedef nur einen Alias Namen definiert. Dein "m" ist also ein Typ. Entsprechend solltest du es auch nicht "m" nennen, sondern eben eher sowas wie "MyMap" bzw. einen zu deinem Anwendungsfall passenden Namen wie "TranslationMap" oder keine Ahnung, was du da genau machst.
    Deine eigentliche Instant von MyMap, also dein "m" musst du noch anlegen wie oben auch. Nur das du jetzt eben deinen alias namen verwenden kannst.



  • Läuft jetzt.
    Danke schön!


Anmelden zum Antworten