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