【问题标题】:"error: no matching function for call to 'std::priority_queue<int>::priority_queue(int)' priority_queue<int> pqueue(4); "“错误:没有匹配函数调用 'std::priority_queue<int>::priority_queue(int)' priority_queue<int> pqueue(4);”
【发布时间】:2019-09-17 09:03:32
【问题描述】:

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

'priority_queue pq(3)'的初始化没有匹配的构造函数

为什么这在 priority_queue 中不起作用但在 vectors 中正常工作?

#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); 

}

【问题讨论】:

  • 即使对于std::vector,这不仅会分配内存,还会初始化它。您的示例将产生一个包含 (0,0,0,0,3,5,1,2) 的向量。请注意这一点。

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


【解决方案1】:

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

【讨论】:

  • 您没有提到 priority_queue 和 vector 之间的任何区别,它们回答了以下问题:“为什么这在 priority_queue 中不起作用但在矢量中正常工作?”。
  • @HoseynHeydari queue 有自己的概念。它不是vector,我们不会随机访问每个元素或更改它们的值,因此在开始时将几个值为0(它们都是等效的)的元素排入队列通常没有用处。无论如何,这个构造函数没有为std::queue 实现,这就是我们不能使用它的原因。
【解决方案2】:

std::priority_queue 具有限制性接口,与 std::vector 不同,并且没有构造函数。

有关构造函数摘要,请参阅https://en.cppreference.com/w/cpp/container/priority_queue/priority_queue

要修复编译错误,您可以这样做:

priority_queue<int> pqueue{}; 

【讨论】:

  • 其实可以使用构造函数(3),传入一个预初始化的std::vector。但是对内存分配没有帮助,因为它只是复制构造了内部容器。
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 2020-07-02
  • 2012-06-18
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多