priority_queue()大根堆和小根堆(二叉堆)
2024-08-28 23:47:59
#include<iostream>
#include <queue>
using namespace std;
int main()
{
//对于基础类型 默认是大顶堆
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > a; // 这里一定要有空格,不然成了右移运算符↓
priority_queue<int, vector<int>, greater<int> > c; //这样就是小顶堆
priority_queue<string> b; for (int i = 0; i < 5; i++)
{
a.push(i);
c.push(i);
}
while (!a.empty())
{
cout << a.top() << ' ';
a.pop();
}
cout << endl; while (!c.empty())
{
cout << c.top() << ' ';
c.pop();
}
cout << endl; b.push("abc");
b.push("abcd");
b.push("cbd");
while (!b.empty())
{
cout << b.top() << ' ';
b.pop();
}
cout << endl;
return 0;
}
优先队列实质就是堆实现的;
默认的定义优先队列是大根堆,即父节点的值大于子节点的值。
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > a;
当然也可以定义小根堆:
priority_queue<int, vector<int>, greater<int> > c; //这样就是小顶堆
将pair加入到队列中:
priority_queue<pair<int, int> > a;//先比较first 再比较second
对于优先队列的操作;
top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容
只能从队列后边加入,从队列前边拿出,在遍历的时候可以通过p.size()或者p.empty();
摘抄自自博客https://blog.csdn.net/weixin_36888577/article/details/79937886
最新文章
- 浏览器兼容innerText nextElementSibling firstElementChild
- C#语句2——循环语句(for穷举、迭代和while循环)
- memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法
- UNIX环境高级编程笔记之进程控制
- GitHub windows客户端拉代码和提交代码
- C++对象的JSON序列化与反序列化探索
- grub2 使用memdisk工具 启动任意iso
- 安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败
- Android Manifest.xml 结构详解
- Windows下一个MySQL有些错误的解决方法
- 【Zookeeper】源码分析之网络通信(二)
- PHP die与exit的区别
- 关于Kafka配额的讨论(2)
- Eclipse中Lombok的安装和注解说明
- 记一次线上bug排查-quartz线程调度相关
- [Noi2014]购票 BZOJ3672 点分治+斜率优化+CDQ分治
- 交互题(二分)(D. Game with modulo)
- Codeforces Round #368 (Div. 2) B. Bakery 水题
- 【C】——如何用线程进行参数的传递
- OpenFileDialog 打开快捷方式时,返回的是快捷方式引用的路径,而不是快捷方式(.lnk)自身的路径