【发布时间】:2021-10-04 07:31:21
【问题描述】:
我错误地在定义std::priority_queue 时省略了compare 参数:
#include <queue>
int main()
{
constexpr auto cmp{[](int a, int b) { return a > b; }};
std::priority_queue<int, std::vector<int>, decltype(cmp)> pq;
}
,它编译成功并且当我用它来实现Dijkstra的算法时工作正常。
然后我意识到我在构造pq时只传递了cmp的类型信息。
但是,只有在使用--std=c++20 标志时,代码才能编译。
我浏览了 cppreference.com 上的 priority_queue 引用,但找不到任何关于自 C++20 以来发生的更改的通知。
我使用了以下版本的g++:
g++ (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
这是自 C++20 以来的预期行为,如果是,是什么影响了这种变化?
【问题讨论】:
-
从 C++20 开始,lambda 是默认可构造的。
-
*无捕获的 lambdas。
标签: c++ lambda constructor c++20 priority-queue