STL 优先队列学习(二叉堆)

大家找到这篇博客说明你对于数据结构或者c++有所了解,

其实这里讲的是数据结构算法中的二叉堆的模板实现,对于二叉堆对来说有大顶堆,小顶堆。

这里的C++中的STL库中可以实现,这一功能简化了自己手写模板的麻烦,增加了运用的方便。

例如一个程序:

就可以实现对于二叉堆挥着队列中的元素进行排序选择最大的元素。

 #include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
priority_queue<int> q;
int main()
{
q.push(1);
q.push(2);
q.push(3);
cout<<q.top()<<endl;

return 0;
}


那么这么好用的东西,那么细致学习一下。


对于优先队列有几个基本的操作:

empty() 如果队列为空返回真

pop() 删除对顶元素

push() 加入一个元素

size() 返回优先队列中拥有的元素个数

top() 返回优先队列对顶元素


在int类型中默认的是大顶堆, 也就是top()处来的第一个元素是队列中最大的。

使用方法:

头文件:

#include <queue>

声明方式:

1、普通方法:

priority_queue<intq; //q表示的是队列的名字
//简单使用

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
priority_queue<int> q;
int main()
{
q.push(1);
q.push(2);
q.push(3);
cout<<q.top()<<endl;
return 0;
}




//自己定义结构体
//最小值优先, x小的优先级高
//声明是
priority_queue<int, vector<int>, cmp> q;
//第一个是优先队列的类型, 第二个为容器的类型, 第三个是标胶函数




//小顶堆
struct cmp
{
bool operator()(int x, int y)
{
return x > y;
}
};




//大顶堆
struct cmp
{
bool operator()(int x, int y)
{
return y > x;

}
};



2、优先级定义


//例如下面的程序
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
struct cmp
{
bool operator()(int x, int y)
{
return y > x;
}

};


int main()
{
priority_queue<int, vector<int>, cmp> q;
q.push(1);
q.push(51);
q.push(12);
q.push(331);
q.push(12);
cout<<q.top()<<endl;
return 0;
}




3、结构体声明方式:
//定义方法:
prioritry_queue<node >q;


//结构体中,x小的优先级高
struct node
{
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x;

}
};




你可能感兴趣的:(STL 优先队列学习(二叉堆))