• 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. 
      

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/dskit/p/1623152.html
Copyright © 2020-2023  润新知