STL中heap相關函式

2022-07-03 13:24:15 字數 2006 閱讀 1285

heap並不是屬於stl中的containers,而是在下提供了相關的函式make_heap,sort_heap,pop_heap,push_heap

函式的說明:

make_heap(_first, _last, _comp)

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

max-heap是優先佇列(priority queue)的底層實現機制

max-heap實際上的實現可以是以乙個vector表現的完全二叉樹(complete binary tree)

comp可以沒有,那就是預設的maxheap

void make_heap (randomaccessiterator first, randomaccessiterator last);
first、last是兩個隨機的迭代器

// range heap example

#include // std::cout

#include // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap

#include // std::vector

int main () ;

std::vectorv(myints,myints+5);

std::make_heap (v.begin(),v.end());

std::cout << "initial max heap : " << v.front() << '\n';

std::pop_heap (v.begin(),v.end()); v.pop_back();

std::cout << "max heap after pop : " << v.front() << '\n';

v.push_back(99); std::push_heap (v.begin(),v.end());

std::cout << "max heap after push: " << v.front() << '\n';

std::sort_heap (v.begin(),v.end());

std::cout << "final sorted range :";

for (unsigned i=0; i對於其它的heap函式,引數型別相同;

push_heap():把元素新增在底層vector的end()處,然後重新調整堆序(可以是執行乙個siftup()函式);

pop_heap():把堆頂元素取出來,放到了陣列或者是vector的末尾,用原來末尾元素去替代,然後end迭代器減1(後常跟vector的pop_back()操作),執行siftdown()下溯函式來重新調整堆序;

sort_heap():持續對整個heap做pop_heap操作,每次將操作的範圍向前縮減乙個元素,則可以得到排序好的序列。由於maxheap的top放在end處,所以sort_heap完之後順序輸出是非降序;

如上的演算法需要在堆上進行操作

c++中的 priority_queue 資料結構底層使用了 heap, 所以也可以直接使用 priority_queue 來進行操作;

例如:資料流中的中位數——劍指offer

class solution

else

}double getmedian()

private:

int count=0;

priority_queue, less> max_heap;

priority_queue, greater> min_heap;

};

思想:兩個堆輪著構建,複雜度 o(n),我們分析各自的複雜度;

綜上,採用輪流構建方式的複雜度佔優

STL中heap相關函式用法

這個函式用來將一段現有的資料轉化為乙個heap template1 make heap randomaccessiterator first,randomaccessiterator last 2 make heap randomaccessiterator first,randomaccessit...

STL中關於heap的函式

在stl中,如果要用到堆,則有五個函式,make heap,pop heap,push heap,heap sort,和is heap,其中is heap和heap sort就是判斷容器是否符合堆的條件和把容器中元素進行堆排序。mak heap是把容器中制定迭代器之間的元素進行建堆操作。push h...

STL中堆 heap 函式的使用

所需標頭檔案 algorithm 語言環境 c 一般只用到四個make heap sort heap pop heap push heap。首先這四個函式的引數都一樣 first 首元素的位址 last 尾元素的位址 cmp比較函式 返回值都為void 這四個函式都是建立在陣列的基礎上的 cmp引數...