栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ priority

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ priority

priority_queue 模板

priority_queue 模板有 3 个参数,其中两个有默认的参数;
第一个参数是存储对象的类型(一个节点中存储的数据类型)
第二个参数是存储元素的底层容器(整个priority的形状)
第三个参数是函数对象,定义了一个用来决定元素顺序的断言(可理解为排序函数)
因此模板类型是:

template , typename Compare=std::less> class priority_queue

模板中第二个参数默认为vector容器,第三个参数默认为less
less是头文件function中的一个断言(类似的还有greater)其中使用:
less表示大的元素排在队列前面,是大堆顶
greater表示小的元素排在队列前面,是小堆顶(如下)

用法举例

举个例子:我们希望用priority_queue存储一个同学的成绩、姓名和学号
那么第一个参数可以是:pair>
仍然选择vector作为底层容器,第二个参数:vector>>
第三个参数是我们自己定义的比较函数compare
我们需要的priority_queue就长这样:

priority_queue>, vector>>, compare> grades;

我们希望在将学生的数据推入priority_queue的时候自动排好序,且成绩高的同学排在前面,那么需要一个能够构成大堆顶的compare

struct compare{
    template
    bool operator()(T const& left, U const&right){
        return left.first > right.first;
    }
};

将上面的left.first > right.first改为left.first > right.first就变成小堆顶了

常用操作

push(const T& obj):将obj的副本放到容器的适当位置,这通常会包含一个排序操作
push(T&& obj):将obj放到容器的适当位置,这通常会包含一个排序操作
emplace(T constructor a rgs…):通过调用传入参数的构造函数,在序列的适当位置构造一个T对象。为了维持优先顺序,通常需要一个排序操作
top():返回优先级队列中第一个元素的引用
pop():移除第一个元素
size():返回队列中元素的个数
empty():如果队列为空的话,返回true
swap(priority_queue& other):和参数的元素进行交换,所包含对象的类型必须相同

底层实现

priority_queue的底层实现是堆排序,如果不了解什么是堆排序可以看看这个视频–>堆排序(heapsort)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号