priority_queue()大根堆和小根堆(二叉堆)
- #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
priority_queue()大根堆和小根堆(二叉堆)的更多相关文章
- 二叉堆(一)之 图文解析 和 C语言的实现
概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...
- Binary Heap(二叉堆) - 堆排序
这篇的主题主要是Heapsort(堆排序),下一篇ADT数据结构随笔再谈谈 - 优先队列(堆). 首先,我们先来了解一点与堆相关的东西.堆可以实现优先队列(Priority Queue),看到队列,我 ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- 二叉堆(二)之 C++的实现
概要 上一章介绍了堆和二叉堆的基本概念,并通过C语言实现了二叉堆.本章是二叉堆的C++实现. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的C++实现(完整源码)4. 二叉堆的C++测试程 ...
- 二叉堆(三)之 Java的实现
概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的Java实现(完整源码) ...
- PHP利用二叉堆实现TopK-算法的方法详解
前言 在以往工作或者面试的时候常会碰到一个问题,如何实现海量TopN,就是在一个非常大的结果集里面快速找到最大的前10或前100个数,同时要保证 内存和速度的效率,我们可能第一个想法就是利用排序,然后 ...
- 优先队列之二叉堆与d-堆
二叉堆简介 平时所说的堆,若没加任何修饰,一般就是指二叉堆.同二叉树一样,堆也有两个性质,即结构性和堆序性.正如AVL树一样,对堆的以此操作可能破坏者两个性质中的一个,因此,堆的操作必须要到堆的所有性 ...
- 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆、斜堆
实现优先队列结构主要是通过堆完成,主要有:二叉堆.d堆.左式堆.斜堆.二项堆.斐波那契堆.pairing 堆等. 1. 二叉堆 1.1. 定义 完全二叉树,根最小. 存储时使用层序. 1.2. 操作 ...
- 《数据结构与算法分析:C语言描述》复习——第五章“堆”——二叉堆
2014.06.15 22:14 简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用.二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序.我们关心的通常 ...
- 数据结构与算法——优先队列类的C++实现(二叉堆)
优先队列简单介绍: 操作系统表明上看着是支持多个应用程序同一时候执行.其实是每一个时刻仅仅能有一个进程执行,操作系统会调度不同的进程去执行. 每一个进程都仅仅能执行一个固定的时间,当超过了该时间.操作 ...
随机推荐
- Go GRPC 入门(一)
前言 微服务相关 使用 GRPC 通讯的 Golang 微服务入门 举例写一个微服务,接收网址发送请求获取返回结果返回 正文 安装工具 安装 protobuf 这是 proto 文件的编译器 点我下载 ...
- oop的三大特性和传统dom如何渲染
OOP的三大特性是什么: 封装 :就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系继承:子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写.继承增加了 ...
- 【Flutter】可滚动组件之GridView
前言 GridView可以构建一个二维网格列表.需要关注的是gridDelegate参数,类型是SliverGridDelegate,它的作用是控制GridView子组件如何排列(layout).Sl ...
- 3.利用jmeter制作性能脚本
jmeter录制脚本示例 jmeter手工脚本编写与调试 业务逻辑实现之逻辑控制器 业务脚本参数化实现 jmeter处理cookie beanshell脚本 ...
- netstat -an|awk '/^tcp/ {++s[$NF]} END {for( a in s) {print a,s[a]}}'
监控tcp连接情况 netstat -an|awk '/^tcp/ {++s[$NF]} END {for( a in s) {print a,s[a]}}'
- WTM5.0发布,全面支持.net5
WTM5.0是WTM框架开源2年以来最大的一次升级,全面支持.net5,大幅重构了底层代码,针对广大用户提出的封装过度,不够灵活,性能不高等问题进行了彻底的修改. 这次升级使WTM继续保持开箱即用,高 ...
- StringBuilder和输入输出
构建字符串(StringBuilder的应用) 有些时候,需要由较短的字符串构建字符串,例如:按键或来自文件的单词,采用字符串连接的方式达到此目的效率比较低.每次连接字符串,都会构建一个新的Strin ...
- 《进击吧!Blazor!》第一章 1.初识 Blazor
作者介绍 陈超超 Ant Design Blazor 项目贡献者 拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,Ant Design Blazor 项目贡献者,现就职于正泰集团 ...
- 2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai
.NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会. 2021年上海第一场线下活动就要来了,快来加入我们一起学习.N ...
- 转 5 jmeter性能测试小小的实战
5 jmeter性能测试小小的实战 项目描述 被测网址:www.sogou.com指标:相应时间以及错误率场景:线程数 20.Ramp-Up Period(in seconds) 10.循环次数 ...