已定义以下别名,
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())
?
答案 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 );
,需要明确为其指定比较器实例。