一千萬個為什麽

搜索

在Map中查找最小值

我有一張地圖,我想在地圖中找到最小值(右側)。現在我就是這樣做的

bool compare(std::pair i, pair j) {
  return i.second < j.second;
}
////////////////////////////////////////////////////
std::map mymap;

mymap["key1"] = 50;
mymap["key2"] = 20;
mymap["key3"] = 100;

std::pair min = *min_element(mymap.begin(), mymap.end(), compare); 
std::cout << "min " << min.second<< " " << std::endl;

這工作正常,我能夠得到問題的最小值當我把這個代碼放在我的班級裏它似乎不起作用

int MyClass::getMin(std::map mymap) {
  std::pair min = *min_element(mymap.begin(), mymap.end(), 
                                                 (*this).compare);
                                                 //error probably due to this

  return min.second; 
}

bool MyClass::compare(
    std::pair i, std::pair j) { 
  return i.second < j.second; 
}

還有一個更好的解決方案,不涉及編寫額外的 compare 函數

最佳答案

在C ++ 11中,您可以這樣做:

auto it = min_element(pairs.begin(), pairs.end(),
                      [](decltype(pairs)::value_type& l, decltype(pairs)::value_type& r) -> bool { return l.second < r.second; });

或者把它放在這樣一個很好的函數中(註意我不是模板大師;這在許多方面可能是錯誤的):

template 
typename T::iterator min_map_element(T& m)
{
    return min_element(m.begin(), m.end(), [](typename T::value_type& l, typename T::value_type& r) -> bool { return l.second < r.second; });
}

轉載註明原文: 在Map中查找最小值