make_heap()是生成一个堆,大顶堆或小顶堆
make_heap(_RAIter,_RAIter) 默认生成大顶堆
make_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(生成小顶堆),一种是less(生成大顶堆)
push_heap()是向堆中插入一个元素,并且使堆的规则依然成立
push_heap(_RAIter,_RAIter) 默认为大顶堆
push_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(小顶堆),一种是less(大顶堆)
调用push_heap之前必须调用make_heap创建一个堆
首先数组push_back插入元素,然后再调用push_heap,它会使最后一个元素插到合适位置
注意,push_heap中的_Compare和make_heap中的_Compare参数必须是一致的,不然会插入堆失败,最后一个元素还是在最后位置,导致插入失败
pop_heap()是在堆的基础上,弹出堆顶元素。
pop_heap(_RAIter,_RAIter) 默认为大顶堆
pop_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(小顶堆),一种是less(大顶堆)
比如pop_heap(nums.begin(), nums.end(),greater<int>()),它会将堆顶元素(即为数组第一个位置)和数组最后一个位置对调,然后你可以调用数组pop_back,删除这个元素
注意,pop_heap中的_Compare和make_heap中的_Compare参数必须是一致的,不然会失败
代码示例:
# include <iostream>
# include <functional>
# include <vector>
# include <algorithm>

using namespace std;

void printVec(vector<int> nums)
{
    for (int i = 0; i < nums.size(); ++i)
        cout << nums[i] << " ";
    cout << endl;
}
int main(void)
{
    int nums_temp[] = {8, 3, 4, 8, 9, 2, 3, 4, 10};
    vector<int> nums(nums_temp, nums_temp + 9);
    cout << "make_heap之前: ";
    printVec(nums);

cout << "(默认(less))make_heap: ";
    make_heap(nums.begin(), nums.end());
    printVec(nums);

cout << "(less)make_heap: ";
    make_heap(nums.begin(), nums.end(), less<int> ());
    printVec(nums);

cout << "(greater)make_heap: ";
    make_heap(nums.begin(), nums.end(), greater<int> ());
    printVec(nums);

cout << "此时,nums为小顶堆 greater" << endl;
    cout << "push_back(3)" << endl;
    nums.push_back(3);
    cout << "默认(less)push_heap 此时push_heap失败: ";
    push_heap(nums.begin(), nums.end());
    printVec(nums);
    cout << "push_heap为greater 和make_heap一致,此时push_heap成功: ";
    push_heap(nums.begin(), nums.end(), greater<int>());
    printVec(nums);
    cout << "(greater,不然会失败)pop_heap: ";
    pop_heap(nums.begin(), nums.end(),greater<int>());
    printVec(nums);
    cout << "pop_back(): ";
    nums.pop_back();
    printVec(nums);
}

原文:https://blog.csdn.net/qq_29630271/article/details/66478256

make_heap(), pop_heap(), push_heap()用法相关推荐

  1. C++语法——make_heap、push_heap、pop_heap、sort_heap使用介绍

    目录 一.make_heap(...) 二.push_heap(...) 三.pop_heap(...) 四.sort_heap(...) 这三个函数位于<algorithm>头文件中. ...

  2. make_heap(),push_heap(),pop_heap(),sort_heap()用法。

    #include <iostream> #include <algorithm> using namespace std;        //一般而言设计的时候都是从零开始的. ...

  3. make_heap 用法

    对make_heap(), pop_heap(), push_heap()的用法做个总结: make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素 ...

  4. STL Priority_Queue

    priority_queue 调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法 实现,也算是堆的另外一种形式. 先写一个用 STL 里面堆算法实现的与 ...

  5. c++STL算法基础

    STL算法基础 算法概述 STL中算法分类 查找算法(13个) adjacent_find binary_search count count_if equal_range find find_end ...

  6. 最全ACM常用STL

    STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespace std; 调用: next_permut ...

  7. 重新学习c++--理解引用、智能指针、虚函数、模板、容器

    最近几年用c和python比较多,上次用c++写程序已经是几年前的事情了.温故而知新,是时候重新学习下c++了. C++可以分成四大块去理解: C c++仍以C为基础,区块blocks.语句state ...

  8. 《泛型编程与stl》

    以下是STL六大组件(componments): adapters  配接器 用来修饰其他组件.包括iterator adapters.function  adapters.container ada ...

  9. 堆排序算法原理及C++实现(详细注释)

    1.算法原理 原理部分参考下面这个博客即可: 堆排序算法(图解详细流程) 2.C++实现: 解法一:利用vector实现最大堆 注意:heap_max这个函数调用了两次: 建堆时候和交换最大值之后分别 ...

  10. 编程比赛 介绍 入门 及 学习路线

    内容若有不足与纰漏,请多指教! 文章目录 写在前面 编程比赛介绍 蓝桥杯 天梯赛 CPC类 比赛 编程比赛要点注意 赛前 赛中 赛后 编程比赛常见术语 比赛相关 常见术语 编程 | 学习 学习 | 练 ...

最新文章

  1. IT建设的4化(转载)
  2. 使用wordpress创建自己的博客
  3. IOS将字符串转换为日期时间格式
  4. java获取页面标签_java获取网页源代码后,提取标签内容……
  5. dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]
  6. ubuntu 修改用户名和计算机名称
  7. dw连接服务器文档类型,dw怎么连接服务器的数据库
  8. linux+cp+-rdf,简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)
  9. mysql.proc_修复./mysql/proc
  10. 编译好的C一执行就崩溃,第一句输出都没有,是怎么回事?
  11. 神舟刷蓝天w650dbios_神舟Z7-CT7NA刷入蓝天BIOS破除40W功耗墙
  12. 不能将下载行为传输到IDM(亲测有效)
  13. 用强化学习制作游戏AI
  14. VIM编辑器配置文件修改
  15. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验04 数组及其在程序设计中的应用(2021级)(3)
  16. 义隆循环左移c语言,二进制除法运算(义隆单片机)
  17. MySQL系列教程(四)
  18. 【初阶与进阶C++详解】第二十二篇:C++11新特性(列表初始化+变量类型推到+右值引用+新增默认成员函数+可变模板参数+lambda表达式+包装器function_bind)
  19. 2022江苏民丰农村商业银行社会招聘测试题及答案
  20. 基于Java毕业设计幼儿健康管理系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. 系统可用性量表评估问卷
  2. Atitit 微服务的原理与实现方式 目录 第一章 什么是微服务? 1 第二章 核心要素 2 足够微小, 2 服务化 进程隔离 2 第三章 实现模式 2 多个app启动文件(推荐轻量级) 2 多项目
  3. Atitit 项目文档规范化与必备文档与推荐文档列表
  4. AAtitit.随时间变色特效 ---包厢管理系统的规划titit.随
  5. atitit.spring3 mvc url配置最佳实践
  6. paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.
  7. 银行理财子公司的“超级”玩法
  8. 技术的好文章和烂文章
  9. 气候遇上AI:从此天有可测风云
  10. 详解《云原生架构白皮书》,附下载链接