c++ - 如何在 std::map 中找到最小值?
问题描述
我试图获得 a 中的最小值std::map
。我有一个功能是在地图中查找最小值
#import tool.mm
std::map<std::string, float> direction;
std::pair<std::string, float> min;
direction["up"] = 50.0;
direction["down"] = 20.0;
direction["right"] = 100.0;
direction["left"] = 200.0;
min = *min_element(direction.begin(), direction.end(), &Tool::compare);
这是Tool
类的样子:
//tool.mm
class Tool
{
public:
bool compare(std::pair<std::string, float> i, std::pair<std::string, float> j) {
return (i.second < j.second);
}
};
当我运行这个函数时,我得到一个错误显示
Called object type 'bool (Tool::*)(std::__1::pair<std::__1::basic_string<char>, float>, std::__1::pair<std::__1::basic_string<char>, float>)' is not a function or function pointer
解决方案
您提供的compare 函数不是functor。
它应该是
using Pair = std::pair<const std::string, float>; // just a alias type for convenience
struct Tool
{
bool operator()(const Pair& i, const Pair& j)const
/*^^^^^^^^*/ /*^^^*/
{
return (i.second < j.second);
}
};
你应该这样称呼它
min = *min_element(direction.begin(), direction.end(), Tool());
^^^^^^
但是,如果您可以访问 C++11 或更高版本,只需使用 lambda,它将帮助您在调用的行上查看比较函数(二进制谓词)的定义。
min = *min_element(direction.begin(), direction.end(),
[](const auto& lhs, const auto& rhs){ return lhs.second < rhs.second;});
推荐阅读
- javascript - 尝试使用 axios 遵循 AJAX React 教程
- javascript - d3.js:SVG 条出现在 svg 区域之外
- angular - 如何编写一个与子组件具有相同标签的瘦包装器组件
- jpa - Spring Data Jpa 中的子查询
- android - 如何将构建变体传播到库?
- python - 获取键总数小于或等于 X 的前 5 个值
- django - 如何在 django rest 框架文档中添加参数?
- python - TypeError:切片索引必须是整数或无或具有 __index__ 方法 - Google Sheets API
- python-3.x - 添加 Zip 功能时的列表理解逻辑
- groovy - Groovy 中有没有办法收集列表中的所有对象,其中成员变量与另一个列表中的值匹配?