【发布时间】:2011-02-09 04:42:53
【问题描述】:
我有一个map,我想在地图中找到最小值(右侧)。这是我的做法:
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 函数应该通过 const 引用而不是值来传递参数。此外,当地图根本没有元素时,您会遇到问题,因此请考虑在确定 end() 未返回之前不要取消引用迭代器。
-
en.cppreference.com/w/cpp/algorithm/min_element 具有线性时间。所以如果标准库不支持,最好实现自己的关联容器R/B、AVL、2-3,支持最小操作。
标签: c++ dictionary stl stdmap minimum