priority_queue优先队列按照由⼩到⼤顺序
C++优先队列的基本使⽤⽅法
在优先队列中,优先级⾼的元素先出队列。
标准库默认使⽤元素类型的<操作符来确定它们之间的优先级关系。
优先队列的第⼀种⽤法,也是最常⽤的⽤法:
priority_queue
通过<操作符可知在整数中元素⼤的优先级⾼。
故⽰例1中输出结果为:96532
第⼆种⽅法:
在⽰例1中,如果我们要把元素从⼩到⼤输出怎么办呢?
这时我们可以传⼊⼀个⽐较函数,使⽤functional.h函数对象作为⽐较函数。
priority_queue
其中
第⼆个参数为容器类型。
第⼆个参数为⽐较函数。
故⽰例2中输出结果为:23569
第三种⽅法:
⾃定义优先级。
structnode
{
friendbooloperator<(noden1,noden2)
{
ty
}
intpriority;
intvalue;
};
在该结构中,value为值,priority为优先级。
通过⾃定义operator<操作符来⽐较元素中的优先级。
在⽰例3中输出结果为:
优先级值
95
82
61
23
14
但如果结构定义如下:
structnode
{
friendbooloperator>(noden1,noden2)
{
ty>ty;
}
intpriority;
intvalue;
};
则会编译不过(G++编译器)
因为标准库默认使⽤元素类型的<操作符来确定它们之间的优先级关系。
⽽且⾃定义类型的<操作符与>操作符并⽆直接联系,故会编译不过。
//代码清单
#include
#include
#include
usingNamespacestdnamespacestd;
structnode
{
friendbooloperator<(noden1,noden2)
{
ty
}
intpriority;
intvalue;
};
intmain()
{
constintlen=5;
inti;
inta[len]={3,5,9,6,2};
//⽰例1
priority_queue
for(i=0;i
(a[i]);
for(i=0;i
{
cout<<()<<"";
();
}
cout<
//⽰例2
priority_queue
for(i=0;i
(a[i]);
for(i=0;i
{
cout<<()<<"";
();
}
cout<
//⽰例3
priority_queue
nodeb[len];
b[0].priority=6;b[0].value=1;
b[1].priority=9;b[1].value=5;
b[2].priority=2;b[2].value=3;
b[3].priority=8;b[3].value=2;
b[4].priority=1;b[4].value=4;
for(i=0;i
(b[i]);
cout<<"优先级"<<'t'<<"值"<
for(i=0;i
{
cout<<().priority<<'t'<<().value<
();
}
return0;
}
本文发布于:2022-11-26 05:23:09,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/23110.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |