Wie finde ich den kleinsten Wert in einer map?

Ich habe eine map und ich möchten, finden Sie den minimalen Wert (rechts) in der Karte. Hier ist, wie ich es gemacht habe:

bool compare(std::pair<std::string ,int> i, pair<std::string, int> j) {
  return i.second < j.second;
}
////////////////////////////////////////////////////
std::map<std::string, int> mymap;

mymap["key1"] = 50;
mymap["key2"] = 20;
mymap["key3"] = 100;

std::pair<char, int> min = *min_element(mymap.begin(), mymap.end(), compare); 
std::cout << "min " << min.second<< " " << std::endl;

Den code oben funktioniert einwandfrei und ich bin in der Lage, um den minimalen Wert. Allerdings, wenn ich diesen code in meine Klasse wie folgt, es scheint nicht zu funktionieren:

int MyClass::getMin(std::map<std::string, int> mymap) {
  std::pair<std::string, int> min = *min_element(mymap.begin(), mymap.end(), 
                                                 (*this).compare);
                                                 //Error probably due to "this".
  return min.second; 
}

bool MyClass::compare(
    std::pair<std::string, int> i, std::pair<std::string, int> j) { 
  return i.second < j.second; 
}

Wie kann ich den code mit meiner Klasse? Außerdem gibt es eine bessere Lösung, die nicht bedürfen der Schriftform die weitere compare Funktion?

  • Die Funktion getMin sollte vorbei das argument mit der const-Referenz und nicht als Wert. Auch Sie haben ein problem, wenn die Karte hat keine Elemente überhaupt, so denken Sie daran, nicht dereferecing der iterator vor makig sicher, dass end() zurückgegeben wird.
InformationsquelleAutor Sunny | 2010-04-17
Schreibe einen Kommentar