STL之堆操作

2021-06-26 07:34:09 字數 1078 閱讀 1536

首先來看完全二叉樹的定義:

若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。而將一維陣列視為完全二叉樹書得到的即為堆。

堆效率極高,像十分常用的

排序演算法、

dijkstra

演算法、prim

演算法等都要用堆才能優化,幾乎每次都要考到的

二叉排序樹

的效率也要借助

平衡性來提高,而平衡性基於完全二叉樹。

stl中與堆相關的4個函式——建立堆make_heap(),在堆中新增資料push_heap(),在堆中刪除資料pop_heap()和堆排序sort_heap():

標頭檔案 #include

下面的_first與_last為可以隨機訪問的迭代器(指標),_comp為比較函式(仿函式),其規則——如果函式的第乙個引數小於第二個引數應返回true,否則返回false。

建立堆

make_heap(_first, _last, _comp)

預設是建立最大堆的。對int型別,可以在第三個引數傳入greater()得到最小堆。

在堆中新增資料

push_heap (_first, _last)

要先在容器中加入資料,再呼叫push_heap ()

在堆中刪除資料

pop_heap(_first, _last)

要先呼叫pop_heap()再在容器中刪除資料

堆排序

sort_heap(_first, _last)

排序之後就不再是乙個合法的heap了

#include #include #include #include using namespace std;

void printfvectorint(vector&vet)

int main()

STL中的堆操作

堆在我們做演算法時應該有映像吧,分為大根堆,小根堆。stl中的其實是對堆有實現的,使得我們可以直接拿來用。相關的函式是make heap push heap pop heap sort heap make heap make heap first,end,cmp 引數有3個,第乙個為堆建立堆的第乙個...

STL系列之四 heap 堆

下面再介紹stl中與堆相關的4個函式 建立堆,新增資料,刪除資料,堆排序 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數小於第二個引數應返回true,否則返回false。建立堆 make heap fir...

STL系列之四 heap 堆

下面再介紹stl中與堆相關的4個函式 建立堆make heap 在堆中新增資料push heap 在堆中刪除資料pop heap 和堆排序sort heap 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數...