本来是要写leetcode上的merge k sorted lists那道题目,这个题目我还是很熟悉的,毕竟是看过算法导论的人,但是写的过程中对堆的维护代码还是挺多的,所以我想到了STL中的堆。下面就来学习一下这个STL。

先介绍一个非常好的学习C++的网站 http://www.cplusplus.com/ 这个网站对C++的理解还是很好的,个人觉得比msdn要好不知道哪里去了。

对堆的操纵主要有以下四个:

make_heap, pop_heap, push_heap, sort_heap

他们的函数原型就不说了,需要说明的就是这些函数的操作和算法导论上的算法是一样的,有一些需要注意的细节是make_heap,pop_heap,push_heap,sort_heap三个参数的形式,他们第三个参数都是判断大小的函数,而这个函数就是他们这三个函数维护堆的比较函数,例如:

void pop_heap (RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
        vector<int> a = { , , , , , , , , , , };
make_heap(a.begin(), a.end(),greater<int>());
cout << a.front() << endl; pop_heap(a.begin(),a.end(),greater<int>());
for (int i = ; i < a.size(); i++)
{
cout << a[i] << endl;
}
a.pop_back();

这个pop_heap操作是先把堆顶的元素拿出来,然后通过comp去维护堆(这里应该是把队尾的元素放到第一个去维护),然后在把之前堆顶的那个放到队尾。

所以comp是维护的基本,所以一般四个函数除非有特殊需求,要求comp必须相同。

最新文章

  1. JavaScript 变量声明提前
  2. SPSS数据分析—典型相关分析
  3. Net数值计算MathNet.Numerics类库
  4. Mysql不区分大小写
  5. Lucene IndexReader,IndexWriter,IndexSearcher 缓存应用
  6. Nginx 配置指令的执行顺序(九)
  7. SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类
  8. PLC不能初始化问题
  9. linq2db sqlite应用
  10. ES6最新语法
  11. consul初步学习
  12. HDU-6395-矩阵快速幂
  13. 用 CentOS 7 打造合适的科研环境
  14. USB2.0学习笔记连载(十):关于WIN8及以上系统哈希值问题
  15. Cocos2dx源码赏析(2)之渲染
  16. jsp中jsp:forward 与 redirect区别
  17. easyui问题小结
  18. python开发_random
  19. for循环、for-in、forEach、for-of四大循环
  20. DevExpress 控件使用技巧

热门文章

  1. The Great Mixing
  2. 学习动态性能表(15)--v$rollstat
  3. Python函数-dir()
  4. 在阿里云服务器上安装git
  5. linux find 实例 ***
  6. 自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......
  7. 【转】轻舞飞扬 LTE基本架构
  8. CentOS7 线上环境的一些 配置
  9. 2015.12.12 DataGridveiw中添加checkbox列
  10. 2015.1.15 利用航线id取所有点的函数创建视图