heap并不属于STL容器组件,他是为priority queue优先队列提供服务。
heap只提供了算法,他是建立在vector上的一组操作。
heap的数据结构是一个数组,用vector来存储
提供的方法有:
push_heap(iterator1 first, iterator last) 向heap中加入一个节点,函数接受两个迭代器,用来表现heap的头和尾,并且新元素已经插入到容器的最尾端。调用该方法后,将最尾端的元素插入到适合的位置上。
pop_heap(iterator first, iterator last)弹出heap中堆顶的元素,函数同样接受两个迭代器,表示heap的头尾。当pop_heap之后,最大(小)的元素只是被放在容器的最尾端,没有被取走,所以需要调用vector的back()操作函数访问该元素,如果要移除该元素需要使用vector的pop_back()操作函数。
sort_heap(iterator first, iterator last)是将该堆排序为一个有序数组(vector),操作的方法是反复调用pop_heap()方法,每一次都将最大(小)的元素放到vector的底部,然后将last指针向前移动,直到和first重合,这样讲堆进行了排序。sort_heap())函数调用之后,heap就不是一个合法的heap了。
make_heap(iterator first, iterator last)将[first,last)排列成一个heap,默认是大顶堆。
priority_queue的实现就是利用max_heap大顶堆完成。priority_queue的所有元素,进出都有一定的规则,只有queue顶端的元素(权值最高),才有机会被外界所用,priority_queue不提供遍历功能,也不提供迭代器。只提供一下的几个方法:
priority_queue:empty
priority_queue:pop
priority_queue:push
priority_queue:size
priority_queue:top