zoukankan      html  css  js  c++  java
  • STL 堆的使用

    本来是要写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 = { 3, 5, 6, 7, 8, 1, 3, 6, 12, 78, };
        make_heap(a.begin(), a.end(),greater<int>());
        cout << a.front() << endl;
    
        pop_heap(a.begin(),a.end(),greater<int>());
        for (int i = 0; i < a.size(); i++)
        {
            cout << a[i] << endl;
        }
        a.pop_back();    

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

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

  • 相关阅读:
    React 构建方法总结
    集思广益 (一)
    C#方法调用
    C# Hello World 实例
    C# 环境
    C# 简介
    对象类型的本地写入---plist文件创建以及读取
    正则判断 手机邮箱的正确格式
    数组去重
    Base64编码
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4482233.html
Copyright © 2011-2022 走看看