Map Pair Typedef - irgendwie schnall ichs nich



  • Sorry, ich bins schonwieder.

    Habe folgende Map definiert:

    typedef std::map< std::string, int > NameNumberMap;
    

    Da ich den pair-Typ des öftern wieder brauche wollt ich noch den hier:

    typedef std::pair< std::string, int > NameNumber;
    

    Und weil ich ja vielleicht mal den Typ der Einträge ändern will, ohne alles Umzuschreiben, wollt ich die erste Definition wieder ändern:

    typedef std::map< NameNumber > NameNumberMap;
    

    Aber das geht nicht 😞

    error C2976: 'std::map' : too few template arguments
    c:\programme\microsoft visual studio 8\vc\include\map(175) : see declaration of 'std::map'

    Also seh ich in die Deklaration, sowie in die STL-Referenz, und finde nichts..die Forensuche war auch nicht grade ergiebig:
    Suchstring "*map* *pair* *typedef*" ergab genau keine Einträge 😞

    Kann ich dennoch die Map unabhängig vom Pair definieren?

    (bitte kein #define Workaround, darauf bin ich schon selbst gekommen..)



  • Class iker schrieb:

    Kann ich dennoch die Map unabhängig vom Pair definieren?

    Nur, wenn du eine eigene Klasse davon ableitest und deren Konstruktoren entsprechend überlädst.



  • 😮 😮
    Ne, dann schreib ich doch lieber die paar Zeichen zweimal.. 😉



  • Die map erwartet nunmal zwei Typangaben und will die selber zu einem pair zusammenfassen. Also kannst du entweder deren value_type verwenden oder dein pair wieder auseinandernehmen:

    //a:
    typedef map<string,int> NameNumberMap;
    typedef typename NameNumberMap::value_type NameNumber;
    //ergibt ein pair<const string,int>
    
    //b:
    typedef pair<string,int> NameNumber;
    typedef map<NameNumber::first_type,NameNumber::second_type> NameNumberMap;
    

Anmelden zum Antworten