数据结构的的原理及实现,这里讲的很好http://blog.csdn.net/morewindows/article/details/6709644
而关于STL中的堆的使用Morewindows讲的也不错http://blog.csdn.net/morewindows/article/details/6967409
但是其中存在几个小问题:
1.vector<int> *pvet = new vector<int>(40);
没有必要申请40的空间,20足矣。
2.int a[MAXN];pvet->assign(a, a + MAXN);会将空间设置回20,看来assign函数还是挺厉害的。
3.如果需要小根堆,则需要自己写函数
bool cmp(int a,int b)
{
return a>b;
}
make_heap(pvet->begin(), pvet->end(),cmp); //之后每次使用都需要加入cmp否则运行时错误
pvet->push_back(25);
push_heap(pvet->begin(), pvet->end(),cmp);
pop_heap(pvet->begin(), pvet->end(),cmp);
pvet->pop_back();
sort_heap(pvet->begin(), pvet->end(),cmp); //但对这一句没用,排序结果总是升序的。