优先队列使用方法

前几天做哈夫曼的贪心,想自己模拟搞就是写不对

于是弄了个优先队列水过

干脆总结下


头文件:#include<queue>


一:使用的函数

 成员函数:

empty

true if the priority queue has no elements

pop

removes the top element of a priority queue

push

adds an element to the end of the priority queue

size

returns the number of items in the priority queue

top

returns the top element of the priority queue

常用的也是这么几个

使用方法:

判断是否为空:


if (q.empty()) ...
 


弹出元素:


q.pop();


插入元素:

q.push(x);
 

其中x必须是q所申明的优先队列的元素类型


清除原队列(尤其是多组数据的时候记得注意):


while(!q.empty()) q.pop();



二:从大到小排序


priority_queue<int> q;


其中<int>是变量的类型,可以任意类型。

q是queue队列名称


三:从小到大排序


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




四:自定义排序

多级变量排序的时候需要自定义结构体变量

struct node{

      int x,y;

      friend bool operator < (node n1,node n2){

           if (n1.x!=n2.x) return n1.x<n1.x;

           return n1.y<n2.y;

    }

}

priority_queue<node> q;




从上面的小于号的重载可以看得出来,node中是以x为第一级排序,以y为第二级排序。升序还是降序呢?

大家自己去做试验吧!

全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务