仅使用容器初始化std :: priority_queue

时间:2018-12-17 14:20:38

标签: c++ initialization std

已定义以下别名,

using namespace std;

template <typename T>
using minheap = priority_queue<T, vector<T>, greater<T>>;

我想知道是否有一种方法可以通过仅使用容器(在这种情况下为向量)调用构造函数来初始化priority_queue

minheap<int> queue (vec);  // vec is some vector of integers

但是它似乎不起作用。起作用的是使用基于范围的初始化程序,

minheap<int> queue (vec.begin(), vec.end());

考虑到我要使用整个向量,这非常丑陋。


在其他初始化替代方案中,i read具有以下选项:priority_queue (const Compare& comp, const Container& ctnr);。但是自从这样做以来,我显然太傻了,无法理解C ++

minheap<int> queue (greater<int>, vec);

也不起作用。无论如何,我会以为不需要greater<int>,因为我已经在greater别名声明中明确指定了minheap比较。


有没有办法做类似minheap<int> q (vec);的事情?还是我必须坚持(vec.begin(), vec.end())

1 个答案:

答案 0 :(得分:0)

No, there is no constructor that only takes a container instance.

有一个重载,它只接受 comparator 实例,并默认构造 container ,即explicit priority_queue(const Compare& compare) : priority_queue(compare, Container()) { },而不是相反。

>

最接近的是priority_queue( const Compare& compare, const Container& cont );,需要明确为其指定比较器实例。