Trouver la valeur minimale dans une Carte

J'ai une carte et je veux trouver la valeur minimale (à droite) dans la carte. Droit maintenant, voici comment je l'ai fait

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;

Cela fonctionne bien et je suis en mesure d'obtenir la valeur minimale le problème est que quand je mets ce code dans ma classe, il ne semble pas fonctionner

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; 
}

Aussi est-il une meilleure solution n'impliquant pas à l'écriture supplémentaires compare fonction

Le getMin fonction doit être en train de passer l'argument par référence const, et non par valeur. Aussi, vous aurez un problème lorsque la carte n'a pas d'éléments à tous, donc envisager de ne pas dereferecing l'itérateur avant makig sûr end() n'a pas été retourné.

OriginalL'auteur Sunny | 2010-04-17