我有地圖,我想在地圖中找到最小值(右側)。現在,這裏是我是如何做到的在地圖中查找最小值
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功能應該由常量引用路過的說法,而不是價值。另外,當map完全沒有元素時,你會遇到問題,所以在makig確定end()沒有返回之前,不要反覆判斷迭代器。 – 2010-04-17 17:36:36