此文章关于c++STL。
priority_queue
堆其实就是一个有序的完全二叉树
完全二叉树:
1.除最后一层,其余满二叉树。
2.最后一层从左到右依次排满。
堆分为大根堆和小根堆
拿大根堆举例
大根堆:
1.节点权值 > 左右儿子
2.根节点最大
小根堆则相反。
操作
1.插入(up操作)
2.删除 删除根节点(dwon操作)
以上操作时间复杂度都是logn。
3.定义
priority_queue<int> q;//默认建立大根堆
priority_queue<int,vector<int>,greater<int> > q;//建立小根堆
4.
q.push(x);//将x放入q这个堆中
5.
、
q.size();//堆的大小
6.
q.top();//取根节点元素
7.
q.pop();//将根节点弹出
8.
q.empty();//判空
堆会自动维护堆,使堆变得有序。
重载运算符
将某个运算符的运算规则重新制定一下。
bool operator要重载的运算符(const node&b) const{return .....;}
bool operator<(const node&b) const{return sum>b.sum;}//将小于号重载为判断sum大小;