zoukankan      html  css  js  c++  java
  • STL 优先队列


    关键字为priority_queue ( 大根堆 ) 和 priority_queue <int,vector<int>,greater<int>> ( 小根堆 ).

    在一些定义了权重的地方这个数据结构是很有用的。

    先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部。

    priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级。

    这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面。

    标准库默认使用 < 操作符来确定对象之间的优先级关系,所以如果要使用结构体,需要重载 < 和 > 操作符

    优先队列有两种,一种是最大优先队列;一种是最小优先队列;每次取自队列的第一个元素分别是优先级最大和优先级最小的元素。

    1) 优先队列的定义

    包含头文件:

    <queue>

    关于优先队列的数据类型,可以使用自定义结构体,使用方法如上文所述.

    2) 优先队列的常用操作

    优先级队列支持的操作

    q.empty()         如果队列为空,则返回true,否则返回false

    q.size()            返回队列中元素的个数

    q.pop()             删除队首元素,但不返回其值

    q.top()             返回具有最高优先级的元素值,但不删除该元素

    q.push(item)     在基于优先级的适当位置插入新元素

    其中q.top()为查找操作,在最小优先队列中搜索优先权最小的元素,在最大优先队列中搜索优先权最大的元素.

    优先队列插入和删除元素的复杂度都是 O(lgn).

    另外,在优先队列中,元素可以具有相同的优先权.

    部分转载自 https://www.cnblogs.com/summerRQ/articles/2470130.html

  • 相关阅读:
    MSI文件的制作
    QPushButton 响应回车 设置默认按钮
    ubuntu 使用apt-fast 安装软件包
    apt命令集使用教程
    如何在windows下使用git及github仓库管理项目
    如何在windows下使用git及github仓库管理项目
    01. struts2介绍
    人生能跨越多少个年代
    联调踩的坑:空和空字符串引发的巨大差异
    我的亲历:一行代码,百万人民币打水漂
  • 原文地址:https://www.cnblogs.com/Kv-Stalin/p/9093163.html
Copyright © 2011-2022 走看看