У меня есть карта, и я хочу найти минимальное значение (правую сторону) на карте. Сейчас вот как я это сделалНайти минимальное значение на карте
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;
Это прекрасно работает, и я в состоянии получить минимальное значение проблема, когда я ставлю этот код в моем классе не похоже на работу
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;
}
также есть лучшее решение, не привлекая к написанию дополнительного compare
функции
функции getMin должна быть пропускание аргумента по константной ссылке, а не по значению. Кроме того, у вас будет проблема, когда у карты нет элементов вообще, поэтому не переубирайте итератор до того, как makig вернет конец(). –