我尝试使用priority_queue
向constructor
分配内存,但是出现以下错误:
没有用于初始化“ priority_queue pq(3)”的匹配构造函数
为什么它不能在priority_queue
中工作,但可以在vector
s中正常工作?
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> pqueue(4);
pqueue.push(3);
pqueue.push(5);
pqueue.push(1);
pqueue.push(2);
}
答案 0 :(得分:2)
std::priority_queue
没有这样的constructor,但是下面的代码实现了您想要的:
std::vector<int> temporary_container(4);
std::priority_queue<int, std::vector<int>> pqueue (comparator, std::move(container));
此外,如果您不想更改queue
的大小而只保留内存,则可以按照以下方式进行操作:
std::vector<int> temporary_container;
temporary_container.reserve(4);
std::priority_queue<int, std::vector<int>> pqueue (comparator, std::move(container));
使用这种方法,您应该定义comparator
并将其传递给constructor
。
答案 1 :(得分:0)
std::priority_queue
具有限制性接口,它与std::vector
不同,并且没有该构造函数。
有关构造函数摘要,请参见https://en.cppreference.com/w/cpp/container/priority_queue/priority_queue。
要解决编译错误,您可以改为:
priority_queue<int> pqueue{};