zoukankan      html  css  js  c++  java
  • C++中堆(优先队列)的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue

    C++中堆的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue

    make_heap, pop_heap, push_heap, sort_heap都是标准算法库里的模板函数,用于将存储在vector/deque 中的元素进行堆操作,对不愿自己写数据结构堆的C++选手来说,这几个算法函数很有用,下面是这几个函数操作vector中元素的例子。详细解释可以参见: http://www.cplusplus.com/reference/algorithm/push_heap/

    隐藏行号 复制代码 Demo
    1. #include<iostream>
      
    2. #include<algorithm>
      
    3. #include<vector>
      
    4. using namespace std;
      
    5. void print_ivec(vector<int>::iterator begin, vector<int>::iterator end)
      
    6. {
      
    7.     for(;begin != end; ++begin)
      
    8.         cout << *begin << '\t';
      
    9.     cout << endl;
      
    10. }
      
    11. int main(int argc, char* argv[])
      
    12. {
      
    13.     int a[] = {1, 12, 15, 20, 30};
      
    14.     vector<int> ivec(a, a + sizeof(a) / sizeof(a[0]));
      
    15.     print_ivec(ivec.begin(), ivec.end());
      
    16.     make_heap(ivec.begin(), ivec.end(), greater<int>());
      
    17.     print_ivec(ivec.begin(), ivec.end());
      
    18.     pop_heap(ivec.begin(), ivec.end());
      
    19.     ivec.pop_back();
      
    20.     print_ivec(ivec.begin(), ivec.end());
      
    21.     ivec.push_back(99);
      
    22.     push_heap(ivec.begin(), ivec.end());
      
    23.     print_ivec(ivec.begin(), ivec.end());
      
    24.     sort_heap(ivec.begin(), ivec.end());
      
    25.     print_ivec(ivec.begin(), ivec.end());
      
    26.     return 0;
      
    27. }
      
    28. 
      

    Container Adaptors(容器适配器)priority_queue提供了更方便的堆数据结构,操作像queue, stack 一样简单方便,详情参见:

    http://www.cplusplus.com/reference/stl/priority_queue/

    隐藏行号 复制代码 Demo
    1. #include<iostream>
      
    2. #include<algorithm>
      
    3. #include<queue>
      
    4. using namespace std;
      
    5. int main(int argc, char* argv[])
      
    6. {
      
    7.     priority_queue<int, vector<int>, greater<int>() > pq;
      
    8.     pq.push(676);
      
    9.     pq.push(34);
      
    10.     pq.push(23);
      
    11.     while(!pq.empty())
      
    12.     {
      
    13.         cout << pq.top() << endl;
      
    14.         pq.pop();
      
    15.     }
      
    16.     return 0;
      
    17. }
      
    18. 
      

  • 相关阅读:
    【原】得心应手小工具开发——网易公开课课程下载链接提取器
    【原】得心应手小工具开发——快播自动升级杀手
    【原】得心应手小工具开发——初步统计博客园首页博文的回复率
    【原】过去的平面作品整理
    【原】浅谈对社交类网站的忧虑
    【原】到底怎么样才叫看书?——下篇
    【原】得心应手小工具开发——公务员考试之筛选我的职位报名人数的小工具
    【原】《锋利的JQuery》读书笔记(三)
    C#中如何给自定义类的只读属性赋值
    关于 ASP, ASP.NET; VBS, VB.NET, JS, JS.NET, C# 的体会,思考
  • 原文地址:https://www.cnblogs.com/dskit/p/1623152.html
Copyright © 2011-2022 走看看