“错误:没有匹配函数调用'std :: priority_queue <int> :: priority_queue(int)'priority_queue <int> pqueue(4);“

时间:2019-09-17 09:03:32

标签: c++ oop stl queue priority-queue

我尝试使用priority_queueconstructor分配内存,但是出现以下错误:

  

没有用于初始化“ 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); 

}

2 个答案:

答案 0 :(得分:2)

related question

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{};