优先级队列

本文介绍优先级队列的概念及其实现方式,详细说明了STL中priority_queue类的使用方法,包括构造函数、常用操作等,并通过示例展示了如何利用优先级队列找出一组数据中的前10小元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优先级队列

元素在进入优先级队列时,没有任何限制,但在退出时却有一个标准。我们可以把优先级队列想象成数据元素的集合,元素就像被随便丢尽桶里一样,彼此没有什么联系,删除数据时就像把手伸进桶里,挑一个优先级最大的出来。

优先级队列的实现

STL priority_queue类是通过堆来实现优先级队列的
加入和删除一个结点的时间复杂度都是O(log2n)

优先级队列的构造函数

priority_queue():优先级队列,数据类型T必须实现关系运算符<

优先级队列的操作

bool empty() const:检查队列是否为空
void pop():从优先级队列中删除优先级最大的元素
void push(const T &iteam):向优先级队列中插入一个元素
int size() const:返回优先级队列中放入元素数
T &top():返回具有最高优先级的元素的引用
const T &top() const :常量版的top()

默认情况下,优先级队列假定凡具有最大值的元素也具有最大的优先级。就是说,如果x和y是优先级队列中中的两个元素,并且x<y,那么y比x具有更大的优先级。

举例如何使用priority_queue对象

priority_queue<int>  que1;
int n;
que1.push(10);
que1.push(20);
cout<<que1.size()>>" "<<que1.top();
n=que1.pop();
if(!que1.empty())
{
  que1.pop();
}
cout<<que1.size();

找出前10小元素

int main()
{
   vector<int> vec;
   for(int i=0;i<200;++i)
   {
   	vec.push_back (i);
   }
   
   priority_queue<int,vector<int>,less<int>> que1;//大根堆
   for(int i=0;i<10;++i)
   {
   	que1.push (vec[i]);
   }
   for(int i=10;i<200;++i)
   {
   	if(vec[i]<que1.top())
   	{
   		que1.pop();
   		que1.push(vec[i]);
   	}
   } 
   while(!que1.empty())
   {
   	cout<<que1.top()<<" ";
   	que1.pop();
   }
   cout<<endl;
   return 0;
}`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值