priority_queue优先队列

在学习了堆优化的迪杰斯特拉时,学了优先队列,发现非常好用。QAQ之前应该早点学的,哎,自己又菜又懒,咸鱼王无疑了。学习知识点记录下来!


优先队列就是将队列中的元素赋予优先级,在访问优先队列中的元素时,具有最高优先级的元素先被访问。队列时先进先出,而优先队列是优先级最高的先出。

初始化:需要 头文件 #include<queue>

priority_queue<Type, Container, Functional>

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

一般是:

priority_queue <int,vector<int>,greater<int> > q; //升序队列
priority_queue <int,vector<int>,less<int> >q;     //降序队列
Priority_queue<node>q;                         //    node为结构体,可以自定义优先级

基本操作:

empty( )  //判断一个队列是否为空
pop( )  //删除队顶元素
push( )  //加入一个元素
size( )  //返回优先队列中拥有的元素个数
top( )  //返回优先队列的队顶元素

代码

#include<iostream>
#include<queue>
using namespace std;
int main()
{priority_queue<int,vector<int>,greater<int> >q1;            //升序队列priority_queue<int,vector<int>,less<int> >q2;            //降序队列int a[5]={4,5,2,1,3};for(int i=0;i<5;i++){q1.push(a[i]);q2.push(a[i]);}cout<<"升序队列"<<endl;while(!q1.empty()){cout<<q1.top()<<' ';q1.pop();} cout<<endl;cout<<"降序队列"<<endl;while(!q2.empty()){cout<<q2.top()<<' ';q2.pop();} return 0;
} 

//自定义优先级
#include<iostream>
#include<queue>
using namespace std;
struct node
{int x,y;node(){}node(int a,int b){x=a;y=b; }operator < (const node &rhs)const{return x>rhs.x;                    //x大的优先级高//    return y>rhs.y;                 //y大的优先级高
    }
};
int main()
{priority_queue<node>q;q.push(node(3,1)); q.push(node(2,2)); q.push(node(4,3)); q.push(node(5,4));q.push(node(1,5)); while(!q.empty()){node temp=q.top();q.pop();cout<<temp.x<<' '<<temp.y<<endl;} return 0;
} 

参考:

https://blog.csdn.net/ac_gibson/article/details/44200411

https://blog.csdn.net/weixin_36888577/article/details/79937886

转载于:https://www.cnblogs.com/LjwCarrot/p/9480564.html

STL--priority_queue学习笔记相关推荐

  1. 《Effective STL》学习笔记(第一部分)

    本书从STL应用出发,介绍了在项目中应该怎样正确高效的使用STL.本书共有7个小节50个条款,分别为 (1) 容器:占12个条款,主要介绍了所有容器的共同指导法则 (2) vector和string: ...

  2. 《Effective STL》学习笔记(第四部分)

    6.仿函数.仿函数类.函数等 函数和类似函数的对象--仿函数--遍布STL.关联容器使用它们来使元素保持有 序:find_if使用它们来控制它们的行为:如果缺少它们,那么比如for_each和tran ...

  3. C++(STL)学习笔记

    [1].不定长数组:vector(在头文件vector中)(元素可以重复哦) vector是一个模板类,声明方式:vector<int>a或者vector<double>a.  ...

  4. 《Effective STL》学习笔记(第三部分)

    4. 迭代器 标准STL容器提供了四种不同的迭代器:iterator.const_iterator.reverse_iterator和const_reverse_iterator 为什么有四种迭代器? ...

  5. 《Effective STL》学习笔记(第二部分)

    2. vector和string 所 有的STL容器都很有用,但是相比于其他容器,vector和string更常用.本章从多个角度覆盖vector和string,如:为什么提倡使用 vector代替数 ...

  6. C++ STL 学习笔记__(6)优先级队列priority_queue基本操作

    10.2.7优先级队列priority_queue v  最大值优先级队列.最小值优先级队列 v  优先级队列适配器 STL priority_queue v  用来开发一些特殊的应用,请对stl的类 ...

  7. 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中

    目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...

  8. 学习笔记:C++初阶【C++入门、类和对象、C/C++内存管理、模板初阶、STL简介、string、vector、list、stack、queueu、模板进阶、C++的IO流】

    文章目录 前言 一.C++入门 1. C++关键字 2.命名空间 2.1 C语言缺点之一,没办法很好地解决命名冲突问题 2.2 C++提出了一个新语法--命名空间 2.2.1 命名空间概念 2.2.2 ...

  9. C++ STL学习笔记

    C++ STL学习笔记一 为何要学习STL: 数据结构与算法是编程的核心,STL中包含各种数据结构和优秀的算法,确实值得深入学习,本文中虽然着重使用,但希望有心的朋友能多看看相关数据结构的实现,对于C ...

  10. C++STL学习笔记(4) 分配器(Allocator)

    在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...

最新文章

  1. python【力扣LeetCode算法题库】面试题 01.06-字符串压缩
  2. 如何了解这个世界(社会)运行的本质
  3. 趣学python3(2)-添加以数字文字形式使用下划线的功能,以提高可读性
  4. 夏日清凉小风扇网站源码 抖音引流神器
  5. 一套完整的网络视频监控系统设计方案
  6. C语言把csv文件转xls,Excel怎么批量将CSV格式转换为xlsx或xls格式?VBA、宏、软件?...
  7. matlab 期权delta,欧式期权定价(BS方法delta值和隐含波动率计算)
  8. 零基础如何从零开始运营微信公众号
  9. QStyleOption类型
  10. Html中几种图片格式的区别与使用--我的笔记
  11. AR隐形眼镜来了,一部手机的价格,正式开启人体佩戴测试
  12. 入侵特斯拉汽车Model S 信息娱乐系统漏洞
  13. 计算机,我该学什么?
  14. WIFI6:WLAN 组播转单播原理与测试
  15. 新药开发相关计算机辅助设计,研究称:药物开发将步入计算机辅助设计时代
  16. conda配置python混合开发环境一站式入门【全平台】
  17. grads精致绘图说
  18. 中国人民大学出版社2022年校招
  19. text/html和text/plain的区别
  20. 内容匹配广告投放技术5:品牌展示广告(一)(百度文库课程)

热门文章

  1. 键盘回车事件导致页面刷新的问题
  2. C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法...
  3. 求单独出现的数,冒泡排序优化,strncpy的优化
  4. 借助acs来实现telnet、ssh的远程认证
  5. IT菜鸟,希望大家赐教
  6. About Firefox
  7. Service Mesh是大方向,那Database Mesh呢?
  8. 上传功能(前后端代码)
  9. 在把webpack作为本地开发依赖安装的时候报错
  10. 【权值分块】bzoj1503 [NOI2004]郁闷的出纳员