C++ priority_queue with lambda comparator error(带有 lambda 比较器错误的 C++ priority_queue)
问题描述
我尝试在 VC2010 中编译以下错误代码,但出现错误 C2974 这只发生在我包含 lambda 表达式时,所以我猜它与此有关.
typedef pair, int>adjlist_edge;优先队列,[](adjlist_edge a, adjlist_edge b) ->布尔{if(a.second > b.second){ 返回真;} else { 返回假;}}>adjlist_pq;
我知道模板定义的形式是正确的
priority_queue、greater>pq;
按预期工作.任何想法我做错了什么?lambda 是否有明显的错误,看起来我可能忽略了?感谢阅读!
首先定义 lambda 对象,然后使用 decltype
将其传递给模板的类型,并直接将其传递给构造函数.
>
auto comp = []( adjist a, adjlist b ) { return a.second >b.第二;};优先队列,decltype(comp)>adjlist_pq(comp);
I have the following erroneous code which I am trying to compile in VC2010, but I'm getting the error C2974 this only occurs when I include the lambda expression, so I'm guessing it has something to do with that.
typedef pair<pair<int, int>, int> adjlist_edge;
priority_queue< adjlist_edge , vector<adjlist_edge>,
[](adjlist_edge a, adjlist_edge b) -> bool {
if(a.second > b.second){ return true; } else { return false; }
}> adjlist_pq;
I know the form of the template definition is correct as
priority_queue<int , vector<int>, greater<int>> pq;
Works as expected. Any ideas what I'm doing wrong? Is there something obviously wrong with the lambda that looks wrong that I might be overlooking? Thanks for reading!
First define the lambda object, then pass it to the template's type using decltype
and also pass it directly to the constructor.
auto comp = []( adjist a, adjlist b ) { return a.second > b.second; };
priority_queue< adjlist_edge , vector<adjlist_edge>, decltype( comp ) >
adjlist_pq( comp );
这篇关于带有 lambda 比较器错误的 C++ priority_queue的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:带有 lambda 比较器错误的 C++ priority_queue
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01