首页 > 编程语言 >C++标准库 algorithm 堆操作 heap

C++标准库 algorithm 堆操作 heap

时间:2024-08-15 14:15:51浏览次数:13  
标签:algorithm make 元素 C++ 第三个 参数 pop heap

算法库 -堆操作

基本操作

make_heap() (1)从一个元素范围创建出一个最大堆 (2)将区间内的元素转化为heap.--传比较器
push_heap() 对heap增加一个元素.将一个元素加入到一个最大堆
pop_heap() 对heap取出下一个元素.从最大堆中移除最大元素
sort_heap() 对heap转化为一个已排序群集.将一个最大堆变成一个按升序排序的元素范围

C++11新增特性

is_heap 检查给定范围是否为一个最大堆
is_heap_until 查找能成为最大堆的最大子范围,返回有效二叉堆的最末范围。如果都有效,则返回last.否则返回第一个非二叉堆结构元素的迭代器。

1.make_heap()

make_heap()用于把一个可迭代容器变成一个堆,默认是大顶堆。

它有三个参数。第一个参数是指向开始元素的迭代器,第二个参数是指向最末尾元素的迭代器,第三个参数是less<>()或是greater<>(),前者用于生成大顶堆,后者用于生成小顶堆,第三个参数默认情况下为less<>(),less()用于生成大顶堆。

要使用less(),以及greater(),请添加头文件#include ,且一定要加括号less<>()

2.pop_heap()

pop_heap()用于将堆的第零个元素与最后一个元素交换位置,然后针对前n - 1个元素调用make_heap()函数,它也有三个参数,参数意义与make_heap()相同,第三个参数应与make_heap时的第三个参数保持一致。

注意:pop_heap()函数,只是交换了两个数据的位置,如果需要弹出这个数据,需要在pop_heap()后加上

pop_back();

3.push_heap()

push_heap()用于把数据插入到堆中,它也有三个参数,其意义与make_heap()的相同,第三个参数应与make_heap时的第三个参数保持一致。

在使用push_heap()前,请确保数据存在于容器中

4.sort_heap()

sort_heap()是将堆进行排序,排序后,序列将失去堆的特性(子节点的键值总是小于或大于它的父节点)。它也具有三个参数,参数意义与make_heap()相同,第三个参数应与make_heap时的第三个参数保持一致。大顶堆sort_heap()后是一个递增序列,小顶堆是一个递减序列。

在使用这个函数前,需要确保序列符合堆的特性,否则会报错!

算法库 - cppreference.com

【C++】STL中heap函数的用法(make_heap,push_heap,pop_heap,sort_heap,is_heap,is_heap_until)_c++heap.pop()-CSDN博客

标签:algorithm,make,元素,C++,第三个,参数,pop,heap
From: https://www.cnblogs.com/DSCL-ing/p/18360692

相关文章

  • C++标准库 iomanip 输入输出操纵符 Manipulator
    输入/输出操纵符输入输出操纵符是C++中用于控制输入输出流格式的一组特殊函数或对象。它们通常用于格式化输出,例如设置宽度、精度、对齐方式等,而不涉及数据的实际读写。功能概述:输入输出操纵符能够控制输出的外观,比如调整对齐方式、设置输出的宽度和精度、控制换行等。使用......
  • 【计算机二级C++】题目与C++知识自检
    @目录公共基础知识计算机基础数据库数据结构树链表排序队列栈C++const与static指针函数重载构造与析构多态、继承、权限数据类型输入输出流模板公共基础知识计算机基础计算机完成一条指令所花费的时间称为指令周期顺序程序不具有并发性下列叙述中正确的是CA.算法的......
  • C/C++ 动态分配:malloc()和free()所涉及的空指针和强制类型转换、与new和delete的对比
    1、动态分配的内涵所谓动态内存分配,是指在程序运行时根据需要分配和释放内存,而不是在编译时确定内存需求。动态分配包括两方面的内涵:在堆上分配内存。对于linux的虚拟内存,可以分成以下5段:文本段、数据段(分初始化和未初始化数据段)、堆和栈。不使用动态分配定义一个变量,这个变......
  • c#和c++数据交互二
    1:新建c++模板,生成类型动态库2:c++里类型点击查看代码classA{public: inta; };typedefstruct{ intup; intdown; charinfos[4]; //LPWSTRinfos;}info,*LPinfo;3:c++声明动态库方法点击查看代码#defineCVAPIextern"C"__declspec(dll......
  • 【A GUIDE TO CRC ERROR DETECTION ALGORITHM】 (译文2)
    6.AFullyWorkedExample一个完全可行的例子HavingdefinedCRCarithmetic,wecannowframeaCRCcalculationassimplyadivision,becausethat'sallitis!Thissectionfillsinthedetailsandgivesanexample.定义了CRC算法后,我们现在可以将CRC计算简单地......
  • C++:命名空间与输入输出
    目录前言一、命名空间1.1namespace的价值1.2namespace的定义1.3命名空间的使用二、C++输入&输出前言   C++是一种面向对象的计算机程序设计语言,‌它扩展了C语言的功能,‌并引入了面向对象编程的概念,‌如类、‌继承和多态等,C++是以C语言为基础进行了拓展与创新,C......
  • 【A GUIDE TO CRC ERROR DETECTION ALGORITHM (译文)】上
    AGUIDETOCRCERRORDETECTIONALGORITHM(译文)《APAINLESSGUIDETOCRCERRORDETECTIONALGORITHM》Author:RossN.WilliamsCRC:CyclicRedundancyCheckEverythingyouwantedtoknowaboutCRCalgorithms,butwereafraidtoaskforfearthaterrorsiny......
  • c#和C++数据交互 一CLR篇
    1:配置VC++目录:包含目录:头文件的所在路径,#include时用“”链接器:输入:附加依赖项如果是clr模板,一定要用lib文件,不然会报链接错误2:先建立一个简单的dll模板,实现加法运算点击查看代码NativeCalculate.hclass__declspec(dllexport)NativeCalculate{public: ......
  • C++ 编译过程
    源码——>预处理器.i文件——>编译器.s文件——>汇编器.o文件——>链接器——>执行程序 预处理器:读取代码里#开头的命令,并把他插入到程序文本里,生产已.i为后缀名的文件编译器:把.i 文件生成汇编文件 .s汇编器:把汇编文件生成二进制文件.a 链接器:链......
  • java语言,MySQL数据库;电影推荐网站 30760(免费领源码)计算机毕业设计项目推荐万套实战教
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影推荐网站;电影推荐网站的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本电影推荐网站是针对目前电影推荐网站的实际需求,从实际工作出发,对过去的电影......