gpt4 book ai didi

c++ - C++:priority_queue:模板参数中的lambda表达式

转载 作者:行者123 更新时间:2023-12-01 14:40:13 25 4
gpt4 key购买 nike

我正在尝试将每个元素创建为priority_queue作为3D vector 。三维尺寸最大的元素将成为优先元素。

这是我的代码:

   priority_queue< vector<int>, vector<vector<int>>, [](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
}> pq{};

但出现以下错误:
error: lambda-expression in template-argument

知道我做错了什么吗?谢谢!

最佳答案

您不能在类型模板声明(需要类型的地方)中使用lambda(这是一个对象),而是:

auto lambda =  [](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
};
priority_queue< vector<int>, vector<vector<int>>,decltype(lambda)> pq{lambda};

我们还需要传递 lambda,因为它不是默认可构造的。

在C++ 20上,我们可以执行以下操作:

priority_queue< vector<int>, vector<vector<int>>,decltype([](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
};
)> pq{};

在这里,有两个新的lambda特性发挥作用。首先,您可以直接采用它的类型(在C++ 17中,您不能在未经评估的上下文中使用lambda表达式),其次,lambda是默认可构造的。但是现在,这还不可能。

关于c++ - C++:priority_queue:模板参数中的lambda表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231377/

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