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思想:兩個堆輪著構建,複雜度 o(n),我們分析各自的複雜度;#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;
};
綜上,採用輪流構建方式的複雜度佔優
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引數...