尝试使用 lambda 覆盖 map::compare
函数,似乎以下解决方案有效。
auto cmp = [](const int&a, const int& b) { return a < b; };
std::map<int, int, decltype(cmp)> myMap(cmp);
但是,我必须先定义cmp
,然后再使用它。
我可以在不定义“cmp”的情况下执行此操作吗?
最佳答案
不,您不能在未评估的上下文中使用 lambda - 即示例中的模板参数。
所以你必须在其他地方定义它(使用auto
),然后使用decltype
...另一种方式,正如已经提到的那样使用“序数”仿函数
如果您的问题是关于“如何在定义映射时使用 lambda 表达式 *一次*”,您可以利用 lambda 到 std::的隐式转换:函数
如下:
#include <iostream>
#include <functional>
#include <map>
int main()
{
auto m = std::map<int, int, std::function<bool(const int&, const int&)>>{
[](const int& a, const int& b)
{
return a < b;
}
};
return 0;
}
您可以为该 map
类型引入一个别名,以减少以后的输入...
关于c++ - 直接覆盖 map::compare 与 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045208/