在stl algorithm.h中,常利用一些排序操作,比如通过vector实现一个堆。 如果堆的每个元素是自定义结构,也就是,自己实现的类作为堆的基本元素, 那么make_heap和push_heap,pop_heap就需要开发者提供自己的比较函数。 bool __cmp(value &v1 ,value & v2). 在stl的内部实现中,当这个_cmp判定为true时,就需要调整heap,所以如果 v1 == v2 返回 true。那么恭喜你,掉进了坑里。如果返回false,则能够节省不小的开销,尤其当你的堆用在一个循环内的时候。 ps.在stl中类似heap的结构,最好使用指针作为基本元素,否则数据调整的时候, 拷贝的量是很大的。