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.  
  5. using namespace std;
    
  6.  
  7. void print_ivec(vector<int>::iterator begin, vector<int>::iterator end)
    
  8. {
    
  9.     for(;begin != end; ++begin)
    
  10.         cout << *begin << '/t';
    
  11.     cout << endl;
    
  12. }
    
  13.  
  14. int main(int argc, char* argv[])
    
  15. {
    
  16.     int a[] = {1, 12, 15, 20, 30};
    
  17.     vector<int> ivec(a, a + sizeof(a) / sizeof(a[0]));
    
  18.     print_ivec(ivec.begin(), ivec.end());
    
  19.      
    
  20.     make_heap(ivec.begin(), ivec.end(), greater<int>());
    
  21.     print_ivec(ivec.begin(), ivec.end());
    
  22.  
  23.     pop_heap(ivec.begin(), ivec.end());
    
  24.     ivec.pop_back();
    
  25.     print_ivec(ivec.begin(), ivec.end());
    
  26.  
  27.     ivec.push_back(99);
    
  28.     push_heap(ivec.begin(), ivec.end());
    
  29.     print_ivec(ivec.begin(), ivec.end());
    
  30.  
  31.     sort_heap(ivec.begin(), ivec.end());
    
  32.     print_ivec(ivec.begin(), ivec.end());
    
  33.  
  34.     return 0;
    
  35. }
    
  36.  
  37.  
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i<trElements.length;++i){if(key.parentElement.parentElement.parentElement==trElements[i].parentElement.parentElement){codeElement=trElements[i];break}}if(codeElement!=null){var content=codeElement.innerText;if(window.clipboardData==null){window.alert("您的浏览器不支持脚本复制,请尝试手动复制。")}else{window.clipboardData.setData("Text",content);window.alert("源代码已经复制到剪贴板上。")}}}function LineNumberVisible(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i 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.  
  6. int main(int argc, char* argv[])
    
  7. {
    
  8.     priority_queue<int, vector<int>, greater<int>() > pq;
    
  9.     pq.push(676);
    
  10.     pq.push(34);
    
  11.     pq.push(23);
    
  12.     
    
  13.     while(!pq.empty())
    
  14.     {
    
  15.         cout << pq.top() << endl;
    
  16.         pq.pop();
    
  17.     }
    
  18.     return 0;
    
  19. }
    
<script language="javascript"> function CopyCode(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i<trElements.length;++i){if(key.parentElement.parentElement.parentElement==trElements[i].parentElement.parentElement){codeElement=trElements[i];break}}if(codeElement!=null){var content=codeElement.innerText;if(window.clipboardData==null){window.alert("您的浏览器不支持脚本复制,请尝试手动复制。")}else{window.clipboardData.setData("Text",content);window.alert("源代码已经复制到剪贴板上。")}}}function LineNumberVisible(key){var codeElement=null;var trElements=document.all.tags("ol");var i;for(i=0;i
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值