堆以及stl堆的使用
概念
性質(zhì): 1.堆是一顆完全二叉樹,用數(shù)組實現(xiàn)。?
???2.堆中存儲數(shù)據(jù)的數(shù)據(jù)是局部有序的。
最大堆:1.任意一個結(jié)點存儲的值都大于或等于其任意一個子結(jié)點中存儲的值。?
?????2.根結(jié)點存儲著該樹所有結(jié)點中的最大值。
最小堆:1.任意一個結(jié)點存儲的值都小于或等于其惹你一個子結(jié)點存儲的值。?
?????2.根結(jié)點存儲著該樹所有結(jié)點中的最小值。
無論最小堆還是最大堆,任何一個結(jié)點與其兄弟結(jié)點之間都沒有必然聯(lián)系。
?
STL中并沒有把heap作為一種容器組件,heap的實現(xiàn)亦需要更低一層的容器組件(諸如list,array,vector)作為其底層機(jī)制。Heap是一個類屬算法,包含在algorithm頭文件中。雖然STL中關(guān)于heap默認(rèn)調(diào)整成的是大頂堆,但卻可以讓用戶利用自定義的compare_fuction函數(shù)實現(xiàn)大頂堆或小頂堆。heap的低層機(jī)制vector本身就是一個類模板,heap基于vector便實現(xiàn)了對各種數(shù)據(jù)類型(無論基本數(shù)據(jù)類型還是用戶自定義的數(shù)據(jù)類型)的堆排(前提是用戶自定義的數(shù)據(jù)類型要提供比較機(jī)制compare_fuction函數(shù))。
STL里面的堆操作一般用到的只有4個。
他們就是
make_heap();、pop_heap();、push_heap();、sort_heap();
他們的頭函數(shù)是algorithm
首先是make_heap();
他的函數(shù)原型是:
void make_heap(first_pointer,end_pointer,compare_function);
一個參數(shù)是數(shù)組或向量的頭指針,第二個向量是尾指針。第三個參數(shù)是比較函數(shù)的名字
。在缺省的時候,默認(rèn)是大跟堆。(下面的參數(shù)都一樣就不解釋了)
作用:把這一段的數(shù)組或向量做成一個堆的結(jié)構(gòu)。范圍是(first,last)
然后是pop_heap();
它的函數(shù)原型是:
void pop_heap(first_pointer,end_pointer,compare_function);
作用:pop_heap()不是真的把最大(最小)的元素從堆中彈出來。而是重新排序堆。它
把first和last交換,然后將[first,last-1)的數(shù)據(jù)再做成一個堆。
接著是push_heap()
void pushheap(first_pointer,end_pointer,compare_function);
作用:push_heap()假設(shè)由[first,last-1)是一個有效的堆,然后,再把堆中的新元素加
進(jìn)來,做成一個堆。
最后是sort_heap()
void sort_heap(first_pointer,end_pointer,compare_function);
作用是sort_heap對[first,last)中的序列進(jìn)行排序。它假設(shè)這個序列是有效堆。(當(dāng)然
,經(jīng)過排序之后就不是一個有效堆了)
轉(zhuǎn)載于:https://www.cnblogs.com/inception6-lxc/p/8483845.html
總結(jié)
以上是生活随笔為你收集整理的堆以及stl堆的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE2第五天学习---自定义指令
- 下一篇: 虚拟dom与diff算法 分析