本文主要介绍priority _ queue(C _ priority _ queue)用法的详细说明,通过示例代码详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
公共队列是一种先进先出的数据结构,其中的元素被附加在队列的末尾,从队列的开头删除。
在优先级队列中,元素被赋予优先级。当访问一个元素时,具有最高优先级的元素首先被删除。优先级队列具有先进先出的行为特征。
首先要包含头文件#includequeue,它和queue的区别在于我们可以自定义其中数据的优先级,让优先级最高的排在队列前面,先出列。
优先级队列具有队列的所有特征,包括队列的基本操作,但在此基础上增加了一个内部排序,本质上是通过堆来实现的。
队列的基本操作是相同的:
顶部访问队列头元素
空队列是空的?
Size返回队列中元素的数量。
将元素推到队列的末尾(并排序)
就位构造一个元素并将其插入到队列中。
弹出队列头元素
交换交换内容
定义:优先级队列类型,容器,函数
Type是数据类型,Container是容器类型。(容器必须是用数组实现的容器,比如vector、deque等。但不能使用list。Vector)在STL中默认使用,函数式是比较的方式。
当需要用户定义的数据类型时,需要传入这三个参数。当使用基本数据类型时,只需要传入该数据类型,默认为Big Top Heap。
一般来说:
//升序队列
priority_queue int,vectorint,greater int q;
//降序队列
priority_queue int,vectorint,less int q;
//greater和less是std实现的两个模仿函数(就是让类的使用看起来像函数。它的实现是在一个类中实现一个运算符(),这个类的行为会像一个函数,即仿函数类)。
1.基本类型优先级队列的示例:
#includeiostream
#包括队列
使用命名空间std
int main()
{
//对于基类型,默认为大顶堆。
priority _ queue int a;
//相当于priority _ queue int,vector int,减去int a;
//这里一定要有空格,否则会变成右移运算符
priority_queueint,vectorint,greater int c;//这是小顶桩。
priority _ queue string b;
for(int I=0;i5;我)
{
a .推(一);
c .推(一);
}
而(!a.empty())
{
cout a . top()“”;
a . pop();
}
cout endl
而(!c.empty())
{
cout c . top()“”;
c . pop();
}
cout endl
b . push(' ABC ');
b . push(' ABCD ');
b . push(' CBD ');
而(!b.empty()
{
cout b . top()“”;
b . pop();
}
cout endl
返回0;
}
运行结果:
4 3 2 1 0
0 1 2 3 4
中央商务区
请按任意键继续。
2、用pair做优先队列元素的例子:
规则:成对比较,先比较第一个元素,第一个元素等于第二个元素。
#包括iostream
#包括队列
#包含矢量
使用命名空间std
int main()
{
priority_queuepairint,int a;
pairint,int b(1,2);
pairint,int c(1,3);
pairint,int d(2,5);
a .推(d);
a .推(c);
a .推(b);
而(!a.empty())
{
cout a.top()。第一个“”a.top()。第二个“\ n”;
a . pop();
}
}
运行结果:
2 5
1 3
1 2
请按任意键继续。
3、用自定义类型做优先队列元素的例子
#包括iostream
#包括队列
使用命名空间std
//方法1
结构tmp1 //运算符的重载
{
int x;
TM P1(int a){ x=a;}
布尔运算符(const tmp1 a) const
{
返回x a.x//大顶堆
}
};
//方法2
Struct tmp2 //重写模仿函数
{
布尔运算符()(tmp1 a,tmp1 b)
{
返回a . x b . x;//大顶堆
}
};
int main()
{
tmp1 a(1);
tmp1 b(2);
tmp1 c(3);
priority _ queuetmp1 d;
d .推(b);
d .推(c);
d .推(一);
而(!d.empty())
{
cout d.top()。x ' \ n
d . pop();
}
cout endl
priority_queuetmp1,vectortmp1,tmp 2 f;
f .推(b);
f .推(c);
f .推(a);
而(!空())
{
cout f.top()。x ' \ n
f . pop();
}
}
运行结果:
三
2
一个
三
2
一个
请按任意键继续。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。