当前位置: 首页 > article >正文

创建 priority_queue - 初阶(c++)

 优先级队列

普通的队列是⼀种先进先出的数据结构,即元素插⼊在队尾,⽽元素删除在队头。

⽽在优先级队列中,元素被赋予优先级,当插⼊元素时,同样是在队尾,但是会根据优先级进⾏位置 调整,优先级越⾼,调整后的位置越靠近队头;同样的,删除元素也是根据优先级进⾏,优先级最⾼ 的元素(队头)最先被删除。

其实可以认为,优先级队列就是堆实现的⼀个数据结构。
priority_queue 就是 C++ 提供的,已经实现好的优先级队列,底层实现就是⼀个堆结构。

创建 priority_queue

优先级队列的创建结果有很多种,因为需要根据实际需求,可能会创建出来各种各样的堆: 

  1. 简单内置类型的⼤根堆或⼩根堆:⽐如存储 int 类型的⼤根堆或⼩根堆; 
  2. 存储字符串的⼤根堆或⼩根堆; 
  3. 存储⾃定义类型的⼤根堆或⼩根堆:⽐如堆⾥⾯的数据是⼀个结构体。 
  • 关于每⼀种创建结果,都需要有与之对应的写法。在初阶阶段,先⽤简单的 int 类型建堆,我们先重点学习priority_queue 的⽤法。 注意: priority_queue 包含在 queue 这个头⽂件中

size / empty 
1. size :返回元素的个数。 
2. empty :返回优先级队列是否为空。 
时间复杂度: O(1) 。 
push 
往优先级队列⾥⾯添加⼀个元素。 
时间复杂度:因为底层是⼀个堆结构,所以时间复杂度为 O(log N) 。 
pop 
删除优先级最⾼的元素。 
时间复杂度:因为底层是⼀个堆结构,所以时间复杂度为 O(log N) 。 
top 
获取优先级最⾼的元素。 
时间复杂度: O(1) 。 

代码:

#include <iostream>
#include <queue>
using namespace std;

int a[10] = { 1, 41, 23, 10, 11, 2, -1, 99, 14, 0 };

int main()
{
	priority_queue<int> heap; //默认是一个大根堆

	for (int i = 0; i < 10; ++i)
	{
		heap.push(a[i]);
	}

	while (heap.size())
	{
		cout << heap.top() << " "; //99 41 23 14 11 10 2 1 0 -1
		heap.pop();
	}

	return 0;
}


http://www.kler.cn/a/526402.html

相关文章:

  • Nuxt:利用public-ip这个npm包来获取公网IP
  • MATLAB的数据类型和各类数据类型转化示例
  • JavaScript系列(50)--编译器实现详解
  • Flink中的时间和窗口
  • sem_init的概念和使用案例
  • android 音视频系列引导
  • 如何用 Groq API 免费使用 DeepSeek-R1 70B,并通过 Deno 实现国内访问
  • 青少年编程与数学 02-007 PostgreSQL数据库应用 20课题、连接与ORM
  • Maven的单元测试
  • Deepseek技术浅析(二):大语言模型
  • 【信息系统项目管理师-选择真题】2005下半年综合知识答案和详解
  • 【2024年华为OD机试】 (A卷,100分)- 异常的打卡记录(JavaScriptJava PythonC/C++)
  • 【原创改进】SCI级改进算法,一种多策略改进Alpha进化算法(IAE)
  • SAP系统中的主要采购类型/采购模式总结
  • 应用程序中处理文件上传的方法
  • Linux-Robust-Futex学习笔记
  • Timer计时器
  • 从0到1:C++ 开启游戏开发奇幻之旅(二)
  • 我的求职面经:(1)C++里指针和数组的区别
  • 【异或和之差——Trie,DP】
  • 基于Springboot的社区药房管理系统
  • 【练习】PAT 乙 1023 组个最小数
  • 镭速大文件传输自动选择压缩算法原理
  • 学技术学英语:elasticsearch查询的两阶段queryingfetching
  • 如何监控ubuntu系统某个程序的运行状态,如果程序出现异常,对其自动重启。
  • MATLAB的数据类型和各类数据类型转化示例