您的位置:首页 > 编程语言 > C语言/C++

【C++】优先队列priority_queue

2016-01-21 15:11 489 查看
优先队列是队列的一种,允许用户对队列中存储的元素设置优先级。按照数据的优先级来对队列中的数据进行动态的排序。每次的push和pop操作,队列都会动态的调整。

所以我们无论按照什么顺序push一堆数据,最终在队列里总是top出最大的元素。

1、标准库默认使用元素类型的<操作符来确定他们之间的优先关系。

priority_queue<int> pq;


2、数据越小,优先级越高

priority_queue<int, vector<int>, greater<int> >pq;

priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数:

priority_queue<Type, Container, Functional>

其中Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。

Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.

STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,

优先队列就是大顶堆,队头元素最大。

3、自定义优先级,重载默认符号,重载默认的
< 符号。

示例:
int main()
{
const int len = 5;
int a[len] = {5,10,4,6,3};
priority_queue<int> pq1;

for(int i = 0; i < len; i++)
{
pq1.push(a[i]);
}
for(int i = 0; i < 5; i++)
{
cout<<pq1.top()<<" ";
pq1.pop();
}
cout<<endl;

priority_queue<int, vector<int>, greater<int>> pq2;
for(int i = 0; i < len; i++)
{
pq2.push(a[i]);
}
for(int i = 0; i < 5; i++)
{
cout<<pq2.top()<<" ";
pq2.pop();
}
cout<<endl;

priority_queue<node,vector<node>, Compare> pq3;
node bn[len];
bn[0].priority = 6; bn[0].value = 1;
bn[1].priority = 5; bn[1].value = 4;
bn[2].priority = 8; bn[2].value = 2;
bn[3].priority = 4; bn[3].value = 5;
bn[4].priority = 2; bn[4].value = 3;

for(int i = 0; i < len; i++)
{
pq3.push(bn[i]);
}
for(int i = 0; i < 5; i++)
{
cout<<pq3.top().priority<<" "<<pq3.top().value<<" "<<endl;
pq3.pop();
}
cout<<endl;

return 0;
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: