?,c++,algorithm,comparator,stdmap,minimum"/>

首页 > 解决方案 > 如何在 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

标签: c++algorithmcomparatorstdmapminimum

解决方案


您提供的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;});

推荐阅读