• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-10-10 06:02 Aet 隐藏边栏 |   抢沙发  0 
文章评分 0 次,平均分 0.0

概述

优先级队列是一种用来维护由一组元素构成集合S的数据结构,其中每个元素都有一个相关的值,称之为关键字。一个最小优先级队列支持以下操作:

  • insert(S,x):将元素x插入到集合S中
  • min(S):返回S中具有最小关键字的元素
  • extract_min(S):去掉并返回S中具有最小关键字的元素
  • decrease_key(S,x,k):将元素x的关键字值减小到k,这里的k的值小于x的原始关键字

相关

队列容量由_data的大小来表征。默认将_data大小设为0;可以显式提供reseve_size参数来设置_data的大小。

队列容量用于限制队列大小。一旦队列已满,则下一次插入之前会将队列容量增加一倍;一旦队列不足队列的1/4,则一旦执行extract_min操作则将队列容量缩减至一半。

两个特殊的可调用对象,这两个方法的引入使得最小优先级队列不仅可以应用于classstruct类型,也可以应用于int,double等非类的类型

  • _getKey
    • 一个std::function<TKeyType&(std::shared_ptr<T>)>类型的对象,它可以接收std::shared_ptr<T>类型的参数,返回TKeyType类型的引用。
    • 其中队列保存的是T类型数据的强引用,TKeyType是T类型数据的关键字类型。通过_getKey可以获取队列数据的关键字的引用。
    • 对于class类型,TKeyType就是T对象的关键字类型,_getKey就是返回关键字的引用
    • 对于int等内置类型,TKeyType就是T本身。_getKey就是返回它自身的引用
  • _compare
    • 一个std::function<bool (std::shared_ptr<T>,std::shared_ptr<T>)>类型的对象,它用于队列中两个数据的大小比较。

实现

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享