如何在 std::map<std::string, float> 中找到最小值?
How to find minimum value in std::map<std::string, float>?
我正在尝试获取 std::map
中的最小值。我有一个来自 Finding minimum value in a 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
class 的样子:
//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
您提供的比较函数不是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;});
我正在尝试获取 std::map
中的最小值。我有一个来自 Finding minimum value in a 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
class 的样子:
//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
您提供的比较函数不是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;});