Comment puis-je trouver la valeur minimale dans une carte?

J'ai un map et je veux trouver la valeur minimale (à droite) dans la carte. Voici comment j'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;

Le code ci-dessus fonctionne bien et je suis en mesure d'obtenir la valeur minimale. Cependant, quand je mets ce code à l'intérieur de ma classe comme suit, 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; 
}

Comment puis-je rendre le code du travail avec les élèves de ma classe? Aussi, est-il une meilleure solution qui ne nécessite 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é.
InformationsquelleAutor Sunny | 2010-04-17