STL优先队列的使用方法_进阶篇
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 如果这个会了,那优先队列就全部OK了
// 优先队列在堆里放指针时候的运用
// 即用stl来构建最大堆最小堆
// 但是不同于一般的堆这里讲的是堆中放的是指针是指针!!!!!!
// 简单易懂浅显但不深刻,能迅速应用,后面的要自己在实际操作中理解
//#include
#include
#include
using namespace std;
//这句话一定不能忘记
//STL在这里的操作类似JAVA的类的概念,需要重新定义一下类的操作优先队列的模板里面放的是某各class 所以我们要定义类
//重写
struct bb{
int num;//这里你可以放任意你愿意放的类但是这个class 要有自己的比大小操作符bb(int n=0){num=n;}//初始化
};
// 重点!!!!!!!!!
//
//运用指针来比较类实例大小的时候要注意存在模板中的第三个类,重载的东西是操作符()
//为此,我们要重写优先级别的定义优先队列模板中的最后一个运算类相当于运算符class op{
public:
bool operator()(bb* a,bb* b){return a->num
//这里放进来的就是class bb 的指针了而这个我们自己定义的op运算就是比较指针所指向的bb类的实例的大小注意返回为bool
//大顶堆小于大顶堆大于小顶堆
};
//测试
int main(){
priority_queue
//第一个参数bb*的意思是优先队列里的内容是什么bb* 指针
//第二个参数vector
//第三个参数op的意思采用哪种方式确定优先队列的优先级别的运算我们采用指针的比较op 类运算
bb a(1),b(2),c(3),d(5),e(6),f(7);//实例
//指针实例
bb*aa=&a;
bb *bi=&b;//不可以用bb哦
bb* cc=&c;
bb* dd=&d;
bb* ee=&e;
bb* ff=&f;
Q.push(aa);
Q.push(bi);
Q.push(cc);
Q.push(dd);
Q.push(ee);
Q.push(ff);
//编译成功后说明语法正确否则检查指针op类等
//输出测试
cout< }