文章目录

  • 引用
  • 基本操作
  • 改变优先级

引用

引用需要加上头文件queue而不是priority_queue!

#include <iostream>
#include <queue>
using namespace std;
int main(){priority_queue<int> q;
}

基本操作

priority_queue是优先级序列,其底层是通过堆(heap)来实现的,即我们关注的点在于堆顶的元素。使用priority_queue没有返回尾部元素的函数(说堆尾也太奇怪了),只有一个top返回堆顶元素。push,size,empty都是queue类型的数据结构通有的函数。

改变优先级

priority_queue的优先级改变有些奇怪,跟sort函数的cmp函数相同但又不完全相同。它们俩的使用方法基本一致,但是priority_queue的结果跟sort是反过来的。
改变它的优先级有两种方法,第一种是通过结构体来改变,通过引入友元friend来重载(operator)小于号

#include <bits/stdc++.h>
using namespace std;struct fruit {string name;int price;friend bool operator < (fruit f1, fruit f2) { //对于比较两个结构体的小于号进行重载return f1.price < f2.price; //对小于号进行重载}
} f1, f2, f3;int main() {priority_queue<fruit> q;f1.name = "桃子";f1.price = 3;f2.name = "梨子";f2.price = 4;f3.name = "苹果";f3.price = 1;q.push(f1);q.push(f2);q.push(f3);cout << q.top().name << " " << q.top().price;//梨子 4 与sort函数是反过来的
}

第二种
同样利用的是struct,但是此时注意struct cmp的书写与友元书写有些不同。友元书写方式在operator后面是有一个小于号的,但是第二种方法是用括号取而代之。

#include <bits/stdc++.h>
using namespace std;struct fruit {string name;int price;
} f1, f2, f3;struct cmp {bool operator()(fruit f1, fruit f2) {return f1.price < f2.price;}
};int main() {priority_queue<fruit, vector<fruit>, cmp> q; //vector是承载底层数据结构堆的容器 cmp为比较函数f1.name = "桃子";f1.price = 3;f2.name = "梨子";f2.price = 4;f3.name = "苹果";f3.price = 1;q.push(f1);q.push(f2);q.push(f3);cout << q.top().name << " " << q.top().price;
}

注意!! priority_queue的排序跟sort是反过来的!!!
如果priority_queue装载的是int,那么可以用比较器greater与less来直接排。比较器用法如下
对于数组的基本用法

#include <bits/stdc++.h>
using namespace std;int main() {int arr[] = {92, 0, 9, 2, 3313, 412};sort(arr, arr + 6, less<int>());for (int i = 0; i < 6; ++i) {cout << arr[i] << " ";}cout << endl;sort(arr, arr + 6, greater<int>());for (int i = 0; i < 6; ++i) {cout << arr[i] << " ";}
}

优先队列

#include <bits/stdc++.h>
using namespace std;int main() {priority_queue<int, vector<int>, less<int> > q; //注意要加空格 >>是右移运算符q.push(4);q.push(0);q.push(5);cout << q.top();//5
}

由此可直观看出sort与priority_queue的区别,的确是反过来的。

C++STL中的priority——queue相关推荐

  1. 【STL学习】优先级队列Priority Queue详解与C++编程实现

    优先级队列Priority Queue介绍 优先级队列是一个拥有权值观念的queue.它允许在底端添加元素.在顶端去除元素.删除元素. 优先级队列内部的元素并不是按照添加的顺序排列,而是自动依照元素的 ...

  2. 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

    @Author:Runsen STL 中的栈容器是一种容器适配器.在栈容器中,元素在一端插入并在同一端删除. stack 为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>. ...

  3. C++ STL : 模拟实现STL中的容器适配器stack和queue

    目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...

  4. stl中Priority Queues(优先队列)的基本用法

    博客搬家啦 blog.ma6174.com stl中Priority Queues(优先队列)的基本用法 C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. C++ Prio ...

  5. stl:queue 源码_C ++ STL中的queue :: empty()和queue :: size()

    stl:queue 源码 In C++ STL, Queue is a type of container that follows FIFO (First-in-First-out) element ...

  6. 【贪玩巴斯】C++提高编程,掌握STL中最关键的容器技术~(三){map、set、list、queue、stack 五大容器一篇解决!} //2021-08-25

    //  day_03 //  Created by AchesonD16 贪玩巴斯 on 2021/8/19. 1. stack容器 (栈) 1.1 stack 基本概念 栈 概念: stack是一种 ...

  7. swep在C语言中的头文件,C ++ STL中的queue :: swap()

    在本文中,我们将讨论C ++ STL中queue::swap()函数的工作,语法和示例. C ++ STL中的队列是什么? 队列是C ++ STL中定义的简单序列或数据结构,它以FIFO(先进先出)的 ...

  8. C++STL笔记(十一):priority queue(带优先级的队列)详解

    priority queue结构 核心接口 例: 附代码: #include<iostream> #include<queue> using namespace std;int ...

  9. C++ STL中的优先队列(priority_queue)使用

    原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...

最新文章

  1. 代码改变世界_改变世界,一次只写一行代码
  2. Oracle RMAN CATALOG数据库的配置
  3. 定制适合自己的精简桌面环境
  4. python代码需要背吗-python程序需要编译吗
  5. 【Modelsim零基础入门】新建项目+运行第一个verilog仿真程序:一位加法器
  6. Spring Boot 2 实践记录之 条件装配
  7. 单链表算法设计(含大厂面试题)
  8. Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
  9. HDU1022 Train Problem I
  10. node解决request返回内容gzip乱码问题
  11. Echarts异步获取数据不显示问题
  12. 泛微oa部署linux步骤,泛微oa部署微搜功能手册
  13. android systrace log,Android优化之Systrace
  14. 这五本热门网络小说,竟然三本在第四届橙瓜网络文学奖评选目前排在前五!
  15. 2020-10-19 进制转换
  16. 银河麒麟高级服务器部署glusterfs
  17. 胆结石饮食有什么禁忌?
  18. 一个前端搞淘宝模板那些事
  19. 数电学习(十一、D/A和A/D转换)
  20. 第三代电力电子半导体:SiC MOSFET学习笔记(四)SiC MOSFET传统驱动电路保护

热门文章

  1. Vue如何mock数据模拟Ajax请求
  2. 程序设计中的数学思维函数总结(代码以C#为例)
  3. viewport理解
  4. underscorejs-min学习
  5. 灰色滤镜,网页灰色代码
  6. 在受了老板的委屈时候写下的
  7. WPF Page close
  8. 北京科技大学计算机专业博导,北京科技大学计算机与通信工程学院-班晓娟
  9. 1.2低级线程处理API
  10. python中的分支语句