- 概述
priority_queue是一个可以自动排序的queue,queue的特性是只能底入头出。 成员函数
bool empty()
size_type size()
const_reference top()
void push(const value_type& x)//先将元素插入到底层的最底端,然后重新排序
void pop()//先进行排序,然后在弹出顶端没有迭代器
4、代码段
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
void test_pro_dequeue()
{
int ia[9] = {0,1,2,3,4,8,9,3,5};
std::priority_queue<int> ipq(ia, ia+9);
cout << "size" << ipq.size() << endl; //size = 9
for(int i = 0; i < ipq.size() ; i++)
{
cout << ipq.top() << ' ';//9 9 9 9 9 9 9 9 9
}
cout << endl;
while(!ipq.empty()){
cout << ipq.top() << ' '; //9 8 5 4 3 3 2 1 0
ipq.pop();
}
cout << endl;
}
int main() {
test_pro_dequeue();
system("pause");
return 0;
}
5、踩到的坑
别人留给自己的坑
定义priority_queue可以自定义比较函数
5.1问题出现的条件:
5.1.1、priority_queue内存储的是指针(比较函数当然也是使用指针(指向的内容)进行排序)
5.1.2、当指针指向的内容被释放后,然后再去调用priority_queue的pop,进行删除,此时程序挂掉
5.2问题出现的原因是:
调用pop的时候,pop内部需要重新进行排序,排序时指针为空,挂在了自定义比较函数里。