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;
}
* 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;
}
相关文章推荐
- STL源码解析-04序列容器-01vector
- STL源码解析-04序列容器-02list
- STL源码解析-04序列容器-03deque
- STL源码解析-04序列容器-04queue&stack
- STL源码解析-05关联容器-01map&set
- STL源码解析-05关联容器-02hash
- STL源码结构解析之Stack,Queue,Priority_Queue
- STL有6种序列容器(vector, list, deque, queue, priority_deque, stack)
- 从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- STL 源码剖析读书笔记五:序列式容器之 heap、priority_queue、slist
- 从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- STL源码—priority_queue(TT)
- STL之stack&queue容器(笔记)
- STL 之 queue、priority_queue 源码剖析
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
- STL 之 stack&queue&priority_queue 栈,队列与优先队列
- 【JUC源码解析】PriorityBlockingQueue
- TreeSet&NavigableMap&NavigableSet源码解析 给jdk写注释系列之jdk1.6容器(8)
- STL源码—priority_queue