C++优先队列:priority_queue(即时排序队列)

       

        今天我们来讲一下C++中对于排序很好的用的东西:优先队列:priority_queue

        既然是队列那么先要包含头文件#include , 它和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队

        优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。

        和队列基本操作相同,有如下几种:

top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容


        定义:priority_queue< 数据类型, 容器类型, 比较的方式 >
        当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大根堆。

        这里区分一下小根堆和大根堆:

        小根堆是保证最小值在队列最前面,大根堆是保证最大值在最前面。

        例子:

//升序队列
priority_queue ,greater > q;
//降序队列
priority_queue ,less >q;

        这里就定义了两个优先队列

        第一个是小根堆,是int类型

        第二个是大根堆,string类型


        使用示例:

#include 
#include 
using namespace std;

priority_queue a;		//定义优先队列a,int类型,默认是大根堆 
/*相当于:
priority_queue ,less >a;
*/
priority_queue ,greater >b;	//这是小根堆,类型为string 

string f;
int t;

int main() 
{
	cout <<"请输入5个整数,用空格隔开,输入之后换行!\n";
	for (int i=1;i<=5;i++) 
    {
    	cin >>t;
    	a.push(t);		//输入5个数存入a,每一个时刻a中最大的永远在开头 
    }
    while (!a.empty())		//a非空时 
    {
        cout <>f;
		b.push(f);
	}
    while (!b.empty()) 
    {
        cout << b.top() << ' ';
        b.pop();
    }
    //同上 
    cout <

你可能感兴趣的:(C++,排序,c++,开发语言,数据结构)