2016-12-30 107 views
0

我发现priority_queue的构造函数http://www.cplusplus.com/reference/queue/priority_queue/priority_queue/是这样的:C++的优先级队列构造

priority_queue (const Compare& comp, const Container& ctnr); 

,但我发现的例子是这样的:

std::priority_queue<int, std::vector<int>, std::greater<int> > q2; 

什么是这两个构造函数之间的区别?

我已经尝试过他们两个,但第一个没有工作,priority_queue没有从小到大排序。下面是代码:

priority_queue<greater<int>, vector<int>> pq; 
pq.push(4); 
pq.push(2); 
pq.push(1); 
pq.push(3); 
pq.push(5); 

for (int i = 0; i < 5; i++) { 
    cout << pq.top() << endl; 
    pq.pop(); 
} 

结果还是5,4,3,2,1

+0

您似乎对构造函数和声明之间的区别感到困惑。 –

+0

@SamVarshavchik你让我错了,我的观点是第一个需要两个参数,第二个需要三个参数。我需要编辑我的问题一点点,这是令人困惑的。 – myyukiho

+0

第二个实际上需要零参数。检查[更好的参考](http://en.cppreference.com/w/cpp/container/priority_queue)并尝试理解模板化变量声明和构造函数之间的区别。 –

回答

2

什么是这两个构造函数之间的区别?

其中之一是构造函数;另一个不是。

typedef只是创建一个类型别名,称为mypq_type。当您创建此类型的对象时,您仍然会传递这些相同的构造函数参数。

+0

对不起,我原来的问题很混乱,我已经提出澄清。 – myyukiho

+0

@myyukiho:你还在比较一个构造函数与不是构造函数的东西。 –