STL堆排序其实就是 创建一个二叉树,下面 是几个常用函数的使用 方法和代表的意思
#include
#include
#include
#include
using namespace std;

(1)创建一个数组, 并添加数据
    vector v_Arry;
    v_Arry.pus h_back(5);
    v_Arry.pus h_back(6);
    v_Arry.pus h_back(4);
    v_Arry.pus h_back(8);
    v_Arry.pus h_back(2);
    v_Arry.pus h_back(3);
    v_Arry.pus h_back(7);
    v_Arry.pus h_back(1);
    v_Arry.pus h_back(9);
    v_Arry.pus h_back(10) ;
    v_Arry.pus h_back(55) ;

(2)make_he ap(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]-->

STL 堆排序使用和体会_第1张图片 

结果不是唯一单一定要 满足父节点和子节点的 大小关系。
(4)pop_hea p(v_Arry.b egin(), v_Arry.end ());//把根节点 移到末尾,并没有删除
     v_Arry.pop _back();// 删除该节点
    此时输出结果:10, 9,7,8,6,3, 4,1,2,5
二叉树如下:

STL 堆排序使用和体会_第2张图片 

(5)v_Arry. push_back( 55); //只是添加数据放到 子节点
    push_heap( v_Arry.beg in(), v_Arry.end ());//往二叉树 中插入数据,满足子节 点小于等于父节点
此时输出结果:55, 10,7,8,9,3 ,4,1,2,5,6
二叉树如下:

STL 堆排序使用和体会_第3张图片 

(6)sort_he ap(v_Arry. begin(), v_Arry.end ());//对二叉树 所有节点进行排序
此时输出结果:1,2 ,3,4,5,6,7 ,8,9,10,55

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

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