Tengo un mapa y quiero encontrar el valor mínimo (lado derecho) en el mapa. Ahora aquí es cómo lo hiceEncontrar el valor mínimo en un mapa
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;
Esto funciona bien y yo soy capaz de obtener el valor mínimo el problema es cuando pongo este código dentro de mi clase no parece trabajar
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;
}
también hay una mejor solución que no implique a escribir la función adicional compare
la función getMin debe estar pasando el argumento de referencia constante, y no por valor. Además, tendrá un problema cuando el mapa no tenga ningún elemento, así que considere no eliminar el iterador antes de que no se devuelva end(). –