当前位置:   article > 正文

priority_queue优先队列的使用方法_priority_queue用法

priority_queue用法

说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_queue优先队列是按照优先级的顺序来排队,优先级我们可以把它理解成是一种规则,不像队列那样抽象的说是按照时间的,优先队列的这种规则我们可以自己自定义,接下来我们来看看具体的讲解。

目录

一、关于priority_queue使用到的的函数

 二、priority_queue的定义

          三、具体举例

     (1)普通例子: 

     (2)pair类型  比较(先比较第一个,如果第一个想等的话再比较第二个)

     (3)自定义排序


一、关于priority_queue使用到的的函数

  1. size() 优先队列中的元素个数
  2. empty()  判断优先队列中的元素是否为空
  3. top()  优先队列中的队首元素,也就是优先级最高的元素
  4. push()    插入元素到队尾,并且按照优先级排好序
  5. pop()     删除容器中的第一个元素

 二、priority_queue的定义

priority_queue<type,container,functional>

type就是类型,如int,double等等。

container容器类型的意思,必须是用数组实现的容器,比如说有vector,deque等,但不能用list链表,STL默认的是vector,如果没有理解的话,我们就把这段介绍简化为以后要用vector就行啦,基本上都是它。

functional就是比较的方式,也就是自定义的规则。

当我们想要自定义规则,才需要传入这三个参数,平时一般不需要的。

如priority_queue<int>是从大到小排的,就是降序(大顶堆,有些资料又说是小顶堆,我都搞糊涂了,哈哈哈) 

三、具体举例

(1)普通例子: 

  1. //priority_queue<int>降序排列,从大到小
  2. //priority_queue<int,vector<int>,less<int> >降序排列
  3. //priority_queue<int,vector<int>,greater<int> >升序排列,从小到大
  4. #include<bits/stdc++.h>
  5. using namespace std;
  6. int n;
  7. priority_queue<int>a;//初始是从大到小排序
  8. int main()
  9. {
  10. cin>>n;
  11. int x;
  12. for(int i=0;i<n;i++){
  13. cin>>x;
  14. a.push(x);
  15. }
  16. while(!a.empty()){
  17. cout<<a.top()<<" ";
  18. a.pop();
  19. }
  20. return 0;
  21. }

 

(2)pair类型  比较(先比较第一个,如果第一个想等的话再比较第二个)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. priority_queue<pair<int,int> >a;//从大到小,降序排列
  4. int main()
  5. {
  6. pair<int,int>b(11,2);
  7. pair<int,int>c(1,23);
  8. pair<int,int>d(234,3);
  9. pair<int,int>e(78,888);
  10. a.push(b);
  11. a.push(c);
  12. a.push(d);
  13. a.push(e);
  14. while(!a.empty()){
  15. cout<<a.top().first<<" "<<a.top().second;
  16. cout<<endl;
  17. a.pop();
  18. }
  19. return 0;
  20. }

(3)自定义排序

struct rule{   
    bool operator()(node a,node b){
        return a.y<b.y;
    }
};

这个叫做运算符重载,顾名思义,就是自己修改规则,rule是自定义的规则名称,自己选择,其他的大家可以当成死记硬背的知识,return 后面的语句就是自己指定的规则,上面的规则是按照结构体中成员变量y从大到小来排序的

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef struct{
  4. int x;
  5. int y;
  6. }node;
  7. struct rule{ //按照结构体中y从大到大
  8. bool operator()(node a,node b){
  9. return a.y<b.y;
  10. }
  11. };
  12. int main()
  13. {
  14. int n;
  15. cin>>n;
  16. priority_queue<int,vector<node>,rule>a;
  17. for(int i=0;i<n;i++){
  18. node q;
  19. cin>>q.x>>q.y;
  20. a.push(q);
  21. }
  22. cout<<"优先级级:-----------"<<endl;
  23. while(!a.empty()){
  24. cout<<a.top().x<<" "<<a.top().y;
  25. cout<<endl;
  26. a.pop();
  27. }
  28. return 0;
  29. }

 

 好啦,本篇文章结束啦,想要学会priority_queue我还推荐大家去洛谷上面找相关题目去练习滴,加油哈!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/355183
推荐阅读
相关标签
  

闽ICP备14008679号