priority_queue的关键源码
template <class T, class Squence = vector<T>,
class Compare = less<typename Sequence::value_tyoe>>
class priority_queue{
...
protected:
Sequence c;
Compare comp;
public:
bool empty() const {return c.empty();}
size_type size() const {return c.size();}
const_reference top() const {return c.front()}
void push(const value_type& x)
{
c.push_back(x);
push_heap(c.begin(), c.end(),comp);
}
void pop() {
pop_heap(c.begin(), c.end(),comp);
c.pop_back();
}
};
测试代码
#include <queue>
#include <iostream>
using namespace std;
int main() {
int ia[9] = {0, 4, 1, 2, 3, 6, 5, 8, 7};
priority_queue<int> pq(ia, ia + 9);
cout << pq.size() <<endl;
for(int i = 0; i < pq.size(); i++)
{
cout << pq.top() << " ";
}
cout << endl;
while (!pq.empty())
{
cout << pq.top() << ' ';
pq.pop();
}
return 0;
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9abfb66d99e7211af311d088183803d7.png)