J'ai une carte et je veux trouver la valeur minimum (côté droit) sur la carte. En ce moment, voici comment je l'ai faitTrouver la valeur minimale dans une carte
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 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;
}
Il existe également une meilleure solution n'impliquant pas l'écriture de la fonction supplémentaire compare
la fonction getMin doit être passer l'argument par référence const, et non par valeur. De plus, vous aurez un problème quand la carte ne contient aucun élément, donc ne considérez pas déréférencer l'itérateur avant de vous assurer que end() n'a pas été retourné. –