【发布时间】:2019-10-23 06:52:18
【问题描述】:
我正在尝试声明一个带有比较函数的 std::set,以通过使用带有捕获值的 lambda 来指定元素的顺序。
我尝试使用捕获的值创建一个 lambda,并将该 lambda 作为模板化参数传递给 std::set。 我也尝试过使用仿函数,但也无法正常工作。
//Using a lambda
int value = 3; //This is not known at compile time
std::function cmp = [&value](int a, int b){
return value > 123 ? a < b : a >= b;
};
std::set<int, cmp> mySet;
// Using a functor
class Cmp{
int value;
public:
Cmp(int value) : value(value){};
bool operator()(const int&a, const int& b){
return value > 123 ? a < b : a >= b;
}
};
int val = 3; //This is not known at compile time
Cmp cmp(val);
set<int, cmp> mySet;
使用 lambda 时出现此错误:
注意:lambda 闭包类型有一个已删除的默认构造函数
使用仿函数时的这个:
错误:没有匹配的函数调用'Cmp::Cmp()'
【问题讨论】:
标签: c++