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)