首页
IT
登录
6mi
u
盘
搜
搜 索
IT
队列queue和deque和priority
队列queue和deque和priority
xiaoxiao
2021-03-25
138
普通队列 queue
q.push(elem);放入数据
q.pop(elem);//取出数据
q.front(elem);看顶层数据
q.top(elem);同上
q.empty();//看是否为空
q.size();//看大小
优先队列 priority_queue
优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队
~
百度百科上这样描述的: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素 优先队列的类定义 优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;
2
) 插入一个新元素;
3
) 删除.在最小优先队列(min priorityq u e u e)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行. 优先队列,其构造及具体实现我们可以先不用深究,我们现在只需要了解其特性,及在做题中的用法,相信,看过之后你会收获不少。 使用优先队列,首先要包函STL头文件
"
queue
"
, 以一个例子来解释吧(呃,写完才发现,这个代码包函了几乎所有我们要用到的用法,仔细看看吧): view plaincopy to clipboardprint
?
/*
优先队列的基本使用 2010/7/24 dooder
*/
#include
<stdio.h>
#include
<functional>
#include
<queue>
#include
<vector>
using
namespace
std;
//
定义结构,使用运算符重载,自定义优先级1
struct
cmp1{
bool
operator
()(
int
&a,
int
&
b){
return
a>b;
//
最小值优先
} };
struct
cmp2{
bool
operator
()(
int
&a,
int
&
b){
return
a<b;
//
最大值优先
} };
//
定义结构,使用运算符重载,自定义优先级2
struct
number1{
int
x;
bool
operator
< (
const
number1 &a)
const
{
return
x>a.x;
//
最小值优先
} };
struct
number2{
int
x;
bool
operator
< (
const
number2 &a)
const
{
return
x<a.x;
//
最大值优先
} };
int
a[]={
14
,
10
,
56
,
7
,
83
,
22
,
36
,
91
,
3
,
47
,
72
,
0
}; number1 num1[]
={
14
,
10
,
56
,
7
,
83
,
22
,
36
,
91
,
3
,
47
,
72
,
0
}; number2 num2[]
={
14
,
10
,
56
,
7
,
83
,
22
,
36
,
91
,
3
,
47
,
72
,
0
};
int
main() { priority_queue
<
int
>que;
//
采用默认优先级构造队列
priority_queue
<
int
,vector<
int
>,cmp1>que1;
//
最小值优先
priority_queue<
int
,vector<
int
>,cmp2>que2;
//
最大值优先
priority_queue
<
int
,vector<
int
>,greater<
int
> >que3;
//
注意“>>”会被认为错误,
//
这是右移运算符,所以这里用空格号隔开
priority_queue<
int
,vector<
int
>,less<
int
> >que4;
///
/最大值优先
priority_queue
<number1>
que5; priority_queue
<number2>
que6;
int
i;
for
(i=
0
;a[i];i++
){ que.push(a[i]); que1.push(a[i]); que2.push(a[i]); que3.push(a[i]); que4.push(a[i]); }
for
(i=
0
;num1[i].x;i++
) que5.push(num1[i]);
for
(i=
0
;num2[i].x;i++
) que6.push(num2[i]); printf(
"
采用默认优先关系:\n(priority_queue<int>que;)\n
"
); printf(
"
Queue 0:\n
"
);
while
(!
que.empty()){ printf(
"
=
"
,que.top()); que.pop(); } puts(
""
); puts(
""
); printf(
"
采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n
"
); printf(
"
Queue 1:\n
"
);
while
(!
que1.empty()){ printf(
"
=
"
,que1.top()); que1.pop(); } puts(
""
); printf(
"
Queue 2:\n
"
);
while
(!
que2.empty()){ printf(
"
=
"
,que2.top()); que2.pop(); } puts(
""
); puts(
""
); printf(
"
采用头文件\"functional\"内定义优先级:\n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n
"
); printf(
"
Queue 3:\n
"
);
while
(!
que3.empty()){ printf(
"
=
"
,que3.top()); que3.pop(); } puts(
""
); printf(
"
Queue 4:\n
"
);
while
(!
que4.empty()){ printf(
"
=
"
,que4.top()); que4.pop(); } puts(
""
); puts(
""
); printf(
"
采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n
"
); printf(
"
Queue 5:\n
"
);
while
(!
que5.empty()){ printf(
"
=
"
,que5.top()); que5.pop(); } puts(
""
); printf(
"
Queue 6:\n
"
);
while
(!
que6.empty()){ printf(
"
=
"
,que6.top()); que6.pop(); } puts(
""
);
return
0
; }
/*
运行结果 : 采用默认优先关系: (priority_queue<int>que;) Queue 0: 91 83 72 56 47 36 22 14 10 7 3 采用结构体自定义优先级方式一: (priority_queue<int,vector<int>,cmp>que;) Queue 1: 3 7 10 14 22 36 47 56 72 83 91 Queue 2: 91 83 72 56 47 36 22 14 10 7 3 采用头文件"functional"内定义优先级: (priority_queue<int,vector<int>,greater<int>/less<int> >que;) Queue 3: 3 7 10 14 22 36 47 56 72 83 91 Queue 4: 91 83 72 56 47 36 22 14 10 7 3 采用结构体自定义优先级方式二: (priority_queue<number>que) Queue 5: 3 7 10 14 22 36 47 56 72 83 91 Queue 6: 91 83 72 56 47 36 22 14 10 7 3
*/
运行结果: 采用默认优先关系: (priority_queue
<
int
>
que;) Queue
0
:
91
83
72
56
47
36
22
14
10
7
3
采用结构体自定义优先级方式一: (priority_queue
<
int
,vector<
int
>,cmp>
que;) Queue
1
:
3
7
10
14
22
36
47
56
72
83
91
Queue
2
:
91
83
72
56
47
36
22
14
10
7
3
采用头文件
"
functional
"
内定义优先级: (priority_queue
<
int
,vector<
int
>,greater<
int
>/less<
int
> >
que;) Queue
3
:
3
7
10
14
22
36
47
56
72
83
91
Queue
4
:
91
83
72
56
47
36
22
14
10
7
3
采用结构体自定义优先级方式二: (priority_queue
<number>
que) Queue
5
:
3
7
10
14
22
36
47
56
72
83
91
Queue
6
:
91
83
72
56
47
36
22
14
10
7
3
dequeue双向队列
原贴 点击打开链接
转载请注明原文地址: https://ju.6miu.com/read-15557.html
技术
最新回复
(
0
)