gpt4 book ai didi

c++ - 如何为 std::priority_queue 的比较器编写带有捕获的 lambda

转载 作者:行者123 更新时间:2023-11-30 03:24:07 26 4
gpt4 key购买 nike

我有以下代码片段,我想在其中创建一个 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 个

对此有什么建议吗?谢谢。

最佳答案

在构造队列时,您必须将 decltype(cmp) 的实例(例如,cmp)传递给队列。

lambda 的类型不存储捕获的数组。该状态在 lambda 的值中,因此必须按值传递。

关于c++ - 如何为 std::priority_queue 的比较器编写带有捕获的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com