优先队列(priority

您所在的位置:网站首页 队列的叫法 优先队列(priority

优先队列(priority

2024-02-26 11:06| 来源: 网络整理| 查看: 265

文章目录 priority_queue一.优先队列简介二.优先队列特性和操作1.头文件&定义2.默认优先输出大数据(1).举例3.优先输出小数据 即小顶堆(1).举例4.自定义优先级 重载默认的 < 符号(1).使用 funtion .(2). 自定义数据类型 三.基本函数实现1.构造函数2.添加函数3.删除函数4.判断函数5.大小函数6.其他函数7.总结 代码详解1.基本类型优先队列的例子:2.用pair做优先队列元素的例子:3.用自定义类型做优先队列元素的例子

priority_queue

优先队列(priority_queue),实际上,它的本质就是一个heap,可以参考传送门 这个写的也不错

优先级队列是一个拥有权值观念的queue。它允许在底端添加元素、在顶端去除元素、删除元素。 缺省情况下,优先级队列利用一个大顶堆完成。

在这里插入图片描述 而C++STL中的优先队列就是在这个队列的基础上,把其中的元素加以排序。其内部实现是一个二叉堆。所以优先队列其实就是把堆模板化,将所有入队的元素排成具有单调性的一队,方便我们调用。

一.优先队列简介

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。 在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。 首先要包含头文件#include, 他和queue不同的就在于我们可以自定义其中数据的优先级,让优先级高的排在队列前面,优先出队。

二.优先队列特性和操作

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

1.头文件&定义 #include #include //greater // 定义 priority_queue pq; 2.默认优先输出大数据

priority_queue

其中, Type 为数据类型. Container 为保存数据的容器. Functional 为元素比较的方式.

若不写后面两个参数.

容器 默认使用 vector

比较方式 默认使用 operator cout cout int t = rand() % 100; std::cout int x,y; Node(int a=0, int b=0): x(a), y(b) {} }; struct cmp{ bool operator()(Node a, Node b){ if(a.x == b.x) return a.y>b.y; return a.x>b.x; } }; int main(){ priority_queuep; for(int i=0; i   operator bool ()(int x, int y)   {      return x > y;   // x小的优先级高      //也可以写成其他方式,      //如: return p[x] > p[y];表示p[i]小的优先级高   } };

priority_queue q; //定义方法 //其中,第二个参数为容器类型。第三个参数为比较函数。 3、结构体声明方式:

struct node {   int x, y;   friend bool operator //对于基础类型 默认是大顶堆 priority_queue a; //等同于 priority_queue a; // 这里一定要有空格,不然成了右移运算符↓↓ priority_queue c; //这样就是小顶堆 priority_queue b; for (int i = 0; i cout cout cout x = a;} bool operator bool operator() (tmp1 a, tmp1 b) { return a.x cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3