1.前言
C++ STL标准模板库和Boost库都为我们提供了很好的堆的数据结构算法,利用这些算法,我们可以很高效地从一个堆中取出最大值或者最小值。本文采用的是binomial_heap二项堆,是一种利用特殊树结构实现堆排序的一种方法,这里不涉及数据结构的实现,只对该方法的实现做一个记录。
2.使用
#include <iostream>
#include <boost/heap/binomial_heap.hpp>
//设置需要排序的类
class myheaq
{
public:
myheaq(int tmpX,int tmpY):x(tmpX),y(tmpY)
{
}
int x;
int y;
int sumxy() const
{
return x + y;
}
};
//设置比较结构体
struct CompareNodes {
bool operator()(const myheaq* lhs, const myheaq* rhs) const {
return lhs->sumxy() > rhs->sumxy();// 升序,small->big
//return lhs->sumxy() < rhs->sumxy();// 降序,big->small
}
};
int main()
{
myheaq A(2,9);
myheaq B(9,9);
myheaq C(3,7);
myheaq D(1,0);
myheaq E(5,3);
myheaq F(4,1);
boost::heap::binomial_heap<myheaq*,boost::heap::compare<CompareNodes>> heaqQueue;
heaqQueue.push(&A);
heaqQueue.push(&B);
heaqQueue.push(&C);
heaqQueue.push(&D);
heaqQueue.push(&E);
heaqQueue.push(&F);
std::cout << heaqQueue.top()->x << " "<< heaqQueue.top()->y <<std::endl;//结果 1 0
}