我有以下代码片段,我想创建一个lambda表达式但是有一个std :: priority_queue的捕获:
vector<vector<int>> arrays;
......
// I'd like to create a lambda comparator which will access the element of arrays
auto cmp = [&arrays](const pair<size_t, size_t> &a, const pair<size_t, size_t> &b) -> bool
{
return arrays[a.first][a.second] >= arrays[b.first][b.second];
};
// Then, I'd like to put this lambda to be used in the priority queue.
std::priority_queue<pair<size_t, size_t>, vector<pair<size_t, size_t>>, decltype(cmp)> queue;
但是,我会得到以下编译错误,因为Clang想在构造cmp时插入一个参数:
没有用于初始化'value_compare'的匹配构造函数 候选构造函数(隐式复制构造函数)不可行:需要1个参数,但提供了0
对此有何建议?感谢。
答案 0 :(得分:2)
构建它时,您必须将decltype(cmp)
(例如cmp
)的实例传递给队列。
lambda的类型不存储被捕获的数组。该状态是lambda的值,因此必须通过值传递。