STL堆排序其實就是創建一個二叉樹,下面是幾個常用函數的使用方法和代表的意思
#include
#include
#include
#include
using namespace std;

(1)創建一個數組,并添加數據
    vector v_Arry;
    v_Arry.push_back(5);
    v_Arry.push_back(6);
    v_Arry.push_back(4);
    v_Arry.push_back(8);
    v_Arry.push_back(2);
    v_Arry.push_back(3);
    v_Arry.push_back(7);
    v_Arry.push_back(1);
    v_Arry.push_back(9);
    v_Arry.push_back(10);
    v_Arry.push_back(55);

(2)make_heap(v_Arry.begin(), v_Arry.end(), less()) //建堆(其實就是建二叉樹),根節點是最大值,其每一個節點都小于或等于其父節點;使用greater()則相反,根節點是最小值,其每一個節點都大于或等于其父節點

(3)此時可以輸出查看一下建好的堆是不是一個標準的二叉樹
我的輸出結果是:55,10,7,9,6,3,4,1,8,5,2
變成二叉樹就是如下:
<!--[if !vml]--><!--[endif]--> <!--[if !vml]--><!--[endif]-->

 

結果不是唯一單一定要滿足父節點和子節點的大小關系。
(4)pop_heap(v_Arry.begin(), v_Arry.end());//把根節點移到末尾,并沒有刪除
     v_Arry.pop_back();//刪除該節點
    此時輸出結果:10,9,7,8,6,3,4,1,2,5
二叉樹如下:

 

(5)v_Arry.push_back(55); //只是添加數據放到子節點
    push_heap(v_Arry.begin(), v_Arry.end());//往二叉樹中插入數據,滿足子節點小于等于父節點
此時輸出結果:55,10,7,8,9,3,4,1,2,5,6
二叉樹如下:

 

(6)sort_heap(v_Arry.begin(), v_Arry.end());//對二叉樹所有節點進行排序
此時輸出結果:1,2,3,4,5,6,7,8,9,10,55

(7)find ( v_Arry.begin(), v_Arry.end(), value );// 從begin到end查找value,若找不到,返回end

原文地址:http://blog.zol.com.cn/1356/article_1355249.html