Multimap mit 2 keys mit hilfe von pair



  • Hallo liebe Forum Mitglieder,

    ich habe mich in diesem Forum angemeldet, weil ich leider mit google + STL tutorials nicht weiter komme.

    Es geht um folgendes, ich moechte sehr gerne Multimap von der STL verwenden, dazu moechte ich einen Wert mit Hilfe von std::pair (2 keys) bestimmen, der key sollte einen string und einem integer beinhalten, der Wert selber ist ein string. Siehe dazu mein Versuch:

    std::multimap<std::pair<std::string, int>, std::string> multimap;
    
    multimap.insert(std::pair<std::pair<std::string, int>, std::string>(std::pair<std::string, int>("A", 1), "Test"));
    

    IDE: Visual Studio 2010
    Ich bekomme nun folgenden Error (C2784) und (C2676) von VS an den Kopf geworfen:

    Error 1 error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string' c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility 321

    Error 32 error C2676: binary '<' : 'const std::string' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility 322

    Habe schon Stunden lang versucht es zum laufen zu bewegen, ohne Erfolg. 😡
    Jeder noch so kleiner Denk anstoss oder Reference wuerde mir hier sehr viel weiter helfen.

    Bin leider noch kein Template freak 🙄
    Vielen Dank. 😃



  • versuch mal:

    std::multimap<std::pair<std::string, int>, std::string> mymap; // multimap darf nicht der Name der Variablen sein.
    
    mymap.insert(std::pair<std::pair<std::string, int>("A", 1), "Test");
    


  • Ich vermute mal das Problem liegt beim Vergleichsoperator, der für dein pair nicht gefunden wird.

    Edit:
    Nicht für std::pair, sondern vermutlich für std::string wird operator< nicht gefunden. Hast Du string includiert? Wenn nicht - tu es.



  • @ungetested: Stimmt, habs umgeaendert. Danke.

    @theta: DAS kann jetzt nicht sein. 😡 Hab irgend wie den Wald nicht vor lauter Baeumen gesehen. Entschuldigung, sowas simples. Hast aber mein Tag gerettet. Vielen Dank. 👍

    Toll es ist also moeglich 2 keys mit Hilfe von pair zu generieren, siehe oben. Aber bitte includes nicht vergessen. 😉



  • Du kannst die Syntax noch vereinfachen:

    mymap.insert(std::pair<std::pair<std::string, int>("A", 1), "Test");
    mymap.insert(make_pair(make_pair("A", 1), "Test");    // mit make_pair aus <utility> (Auch C++98)
    mymap.insert({{"A", 1}, "Test"});    // mit Initialisierern aus C++11 (wenn dein Compiler das unterstützt und ich es richtig im Kopf habe)
    

Log in to reply