您的位置:首页 > 产品设计 > UI/UE

STL源码解析-04序列容器-05heep&priority_queue

2011-12-02 15:19 471 查看
*************************************************
* heep是一种数据结构,是一种完全二叉树,因此通过一个连续的数组和一组heap算法就可排成一个堆。
* 在STL中没有heap这个数据结构,只是以算法的形式提供对堆的操作。
* __adjust_heap;将根元素调整到满足堆条件的位置。
* make_heap(first, last);将范围之内的连续元素,建成大顶堆。从size/2开始往前,依次调用__adjust_heap。
* push_heap:将新的元素放到数组的最后,然后上溯,找到满足堆的位置。
* pop_heap:将根节点与最后的元素互换,调用__adjust_heap函数,调整新根的位置。
* sort_heap:不断的调用pop_heap即可。
* **********************************************

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
int ia[5] = {1,2,3,4,5};
vector<int> iv(ia, ia+5);

make_heap(iv.begin(), iv.end());

iv.push_back(6);
push_heap(iv.begin(), iv.end());

sort_heap(iv.begin(), iv.end());
for (int i=0; i< iv.size(); i++)
cout << iv[i] << " ";
cout << endl;
pop_heap(iv.begin(), iv.end());
return 0;
}

***************************************
* priority_queue,带有优先权的队列,pop的时候,优先权高的先出。
* 内部的存储结构默认是vector,大顶堆。
* 构造时,调用make_heap函数,将queue中的内容建成堆,调用heap中的操作完成所需的操作。
* ************************************

#include <queue>
#include <iostream>

using namespace std;

int main()
{
int ia[5] = {1,2,3,4,5};
priority_queue<int> ipq(ia, ia+5);
cout << "size:" << ipq.size() << endl;

while(!ipq.empty())
{
cout << ipq.top() << " ";
ipq.pop();
}
cout << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: