您现在的位置是:主页 > news > 科普网站建设/网站优化网站优化

科普网站建设/网站优化网站优化

admin2025/5/1 16:31:26news

简介科普网站建设,网站优化网站优化,在线生成手机网站,哪些软件可以做网站设计简介: 优先级队列是一种常见的数据结构,在《STL源码剖析》中给出的定义是:priorty_queue是以个带权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。 由于这是一个queue,所以只…

科普网站建设,网站优化网站优化,在线生成手机网站,哪些软件可以做网站设计简介: 优先级队列是一种常见的数据结构,在《STL源码剖析》中给出的定义是:priorty_queue是以个带权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。 由于这是一个queue,所以只…

简介:

优先级队列是一种常见的数据结构,在《STL源码剖析》中给出的定义是:priorty_queue是以个带权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。

由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素。 
但是优先级队列中的元素并非依照被推入队列的顺序排列。而是自动依照元素的权值排列。权值最高者排在最前面。 
缺省的情况下维护的是一个大堆,即权值以从高到低排列。

因为优先级队列的内部是用堆来维护,所以很多时候我们要使用堆的情况下会选择用优先级队列来代替

优先级队列的基本操作(其实就和一般的队列是一样的):

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素


 

 常见用法:

1.优先级判断默认使用<操作符,输出按权值从高到低顺序

int main()
{priority_queue<int> p1;//往队列里直接存入整型p1.push(5);p1.push(4);p1.push(6);p1.push(3);p1.push(1);for (int i = 0; !p1.empty(); ++i){cout << p1.top() << " ";p1.pop();}return 0;
}

输出:

6 5 4 3 1

2.权值从低到高的顺序输出(greater优先队列)

priority_queue<int, vector<int>, greater<int> > q

第一个参数为元素的类型,第二个参数为容器类型,第三个参数为比较函数(默认为less),上面的为从小到大的优先级队列,如果将greater改为less或者删去第三个参数,即为权值从大到小排列。如图。注意greater包含在头文件functional内。 

对应的还有less 优先队列

priority_queue<int,vector<int>,less<int> >q;

这其实就和一开始的优先队列一样了,也是从权值大的开始输出 

3.对结构体进行操作

有时候我们想要往队列里存储结构体,那么为了实现和内置类型一样的优先级比较,我们就必须在结构体中实现对“<”的重载。因为优先级队列在内部实现调整的时候会去找“<”操作符,如果找不到就会报错。如下所示。

#include<queue>
using namespace std;
struct node{char s[15];int rank;friend bool operator < (node a,node b ){return  a.rank>b.rank;}};
priority_queue<node>q;

寻找大富翁(裸题)

The kth great number