我发现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
您似乎对构造函数和声明之间的区别感到困惑。 –
@SamVarshavchik你让我错了,我的观点是第一个需要两个参数,第二个需要三个参数。我需要编辑我的问题一点点,这是令人困惑的。 – myyukiho
第二个实际上需要零参数。检查[更好的参考](http://en.cppreference.com/w/cpp/container/priority_queue)并尝试理解模板化变量声明和构造函数之间的区别。 –