std::map<string,int>, das größte Element finden, Funktionsobjekt
-
Hallo,
ich habe eine map und möchte das größte Element daraus finden. Dabei soll nicht der Schlüssel (string) als Kriterium gelten sondern der int-Wert. Habe mir ein Funktionsobjekt gebastelt aber bekomme eine lange template Fehlermeldung geworfen:
struct cmp_map { bool operator()(const std::map<string,int>::iterator &p1, const std::map<string,int>::iterator &p2)const { return (*p1).second < (*p2).second; } }; . . . std::map<std::string,int> map_count; std::max_element(map_count.begin(),map_count.end(),cmp_map());
Was mache ich falsch? Aus der Fehlermeldung werde ich nicht schlau.
mfg
-
Dein Funktor ist falsch, es werden std::map<>::value_types verglichen, nicht Iteratoren. Also:
struct cmp_map { bool operator()(const std::pair<const std::string,int> &p1, const std::pair<const std::string,int> &p2) const { return p1.second < p2.second; } };
BTW: Auch wenn dir eine Fehlermeldung nichts sagt, ist es doch eine gute Idee, diese mit zu posten. Meist gibt es hier irgendwen, dem sie was sagt...
Stefan.
-
Es klappt, danke
-
struct cmp_map { bool operator()(const std::pair<const std::string,int> &p1, const std::pair<const std::string,int> &p2) const { return p1.second < p2.second; } };
vs.
struct cmp_map { typedef std::map<std::string, int> Tmap; bool operator()(Tmap::const_reference p1, Tmap::const_reference p2) const { return p1.second < p2.second; } };
bb
-
unskilled schrieb:
struct cmp_map { bool operator()(const std::pair<const std::string,int> &p1, const std::pair<const std::string,int> &p2) const { return p1.second < p2.second; } };
vs.
struct cmp_map { typedef std::map<std::string, int> Tmap; bool operator()(Tmap::const_reference p1, Tmap::const_reference p2) const { return p1.second < p2.second; } };
bb
Würde ich auch so machen, aber ich wollte halt möglichst nahe am Beispiel bleiben
Stefan.