我有以下错误代码,正在尝试在VC2010中进行编译,但是我遇到了错误C2974,该错误仅在包含lambda表达式时才会发生,因此我猜测它与此有关。
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;
我知道模板定义的形式正确为
priority_queue<int , vector<int>, greater<int>> pq;
按预期工作。有什么想法我做错了吗?我可能忽略的lambda明显有问题吗?感谢您的阅读!
首先定义lambda对象,然后使用decltype
将其传递给模板的类型,然后将其直接传递给构造函数。
auto comp = []( adjist a, adjlist b ) { return a.second > b.second; };
priority_queue< adjlist_edge , vector<adjlist_edge>, decltype( comp ) >
adjlist_pq( comp );
priority_queue
将比较器作为模板参数。 Lambda函数是对象,因此不能用作模板参数(只能有很少的类型,其中包括整数类型)。
接受的答案回答了[[how