【C++】STL——priority_queue优先级队列的介绍和使用、priority_queue的其他成员函数使用

文章目录

  • 1.priority_queue的介绍
  • 2.priority_queue的使用
    • [(1)priority_queue() 构造一个空的优先级队列](#(1)priority_queue() 构造一个空的优先级队列)
    • [(2)priority_queue(first,last) 通过迭代器构造优先级队列](#(2)priority_queue(first,last) 通过迭代器构造优先级队列)
    • [(3)empty( )检测优先级队列是否为空,是返回true,否则返回false](#(3)empty( )检测优先级队列是否为空,是返回true,否则返回false)
    • [(4)top( ) 返回优先级队列中最大(最小元素),即堆顶元素](#(4)top( ) 返回优先级队列中最大(最小元素),即堆顶元素)
    • [(5)push() 在优先级队列中插入元素x](#(5)push() 在优先级队列中插入元素x)
    • [(6)pop() 删除优先级队列中最大(最小)元素,即堆顶元素](#(6)pop() 删除优先级队列中最大(最小)元素,即堆顶元素)

1.priority_queue的介绍

priority_queue的介绍

  
**  1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。**

**  2.此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。**

**  3.优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的"尾部"弹出,其称为优先队列的顶部。**

**  4.底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作:**

  empty():检测容器是否为空

  size():返回容器中有效元素个数

  front():返回容器中第一个元素的引用

  push_back():在容器尾部插入元素

  pop_back():删除容器尾部元素

**  5.标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化指定容器类,则使用vector。**

**  6.需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。**

 

2.priority_queue的使用

 

(1)priority_queue() 构造一个空的优先级队列

**  priority_queue()是C++中的一个构造函数,用于创建一个空的优先级队列。**

  下面是一个使用priority_queue()构造一个空的优先级队列的示例:

cpp 复制代码
#include <iostream>
#include <queue>

int main() {
    // 创建一个空的优先级队列
    std::priority_queue<int> pq;

    // 向优先级队列中插入元素
    pq.push(5);
    pq.push(2);
    pq.push(10);

    // 访问优先级队列中的元素
    std::cout << "Top element: " << pq.top() << std::endl;

    // 删除优先级队列中的元素
    pq.pop();

    // 访问删除元素后的新的顶部元素
    std::cout << "New top element: " << pq.top() << std::endl;

    // 检查优先级队列是否为空
    std::cout << "Is priority queue empty? " << (pq.empty() ? "Yes" : "No") << std::endl;

    // 获取优先级队列中的元素数量
    std::cout << "Priority queue size: " << pq.size() << std::endl;

    return 0;
}

//Top element: 10
//New top element: 5
//Is priority queue empty? No
//Priority queue size: 2

 

(2)priority_queue(first,last) 通过迭代器构造优先级队列

**  priority_queue(first, last)是一个构造函数模板,用于通过迭代器范围[first, last)构造一个优先级队列。**

  以下是priority_queue(first, last)的使用示例:

cpp 复制代码
#include <iostream>
#include <queue>
#include <vector>

int main() {
    // 创建一个包含整数的向量
    std::vector<int> vec = {5, 2, 10};

    // 使用迭代器范围构造一个优先级队列
    std::priority_queue<int> pq(vec.begin(), vec.end());

    // 访问优先级队列中的元素
    while (!pq.empty()) {
        std::cout << "Top element: " << pq.top() << std::endl;
        pq.pop();
    }

    return 0;
}

//Top element: 10
//Top element: 5
//Top element: 2

 

(3)empty( )检测优先级队列是否为空,是返回true,否则返回false

**  empty()是priority_queue中的一个成员函数,用于检查优先级队列是否为空。**

  以下是empty()函数的定义和使用示例:

cpp 复制代码
#include <iostream>
#include <queue>

int main() {
    // 创建一个空的优先级队列
    std::priority_queue<int> pq;

    // 检查优先级队列是否为空
    if (pq.empty()) {
        std::cout << "Priority queue is empty" << std::endl;
    } else {
        std::cout << "Priority queue is not empty" << std::endl;
    }

    // 向优先级队列中插入元素
    pq.push(5);
    pq.push(2);
    pq.push(10);

    // 再次检查优先级队列是否为空
    if (pq.empty()) {
        std::cout << "Priority queue is empty" << std::endl;
    } else {
        std::cout << "Priority queue is not empty" << std::endl;
    }

    return 0;
}

//Priority queue is empty
//Priority queue is not empty

 

(4)top( ) 返回优先级队列中最大(最小元素),即堆顶元素

**  priority_queue中的top()函数是用于访问优先级队列的顶部元素的成员函数。**

  以下是priority_queue中top()函数的定义和使用示例:

cpp 复制代码
#include <iostream>
#include <queue>

int main() {
    // 创建一个空的优先级队列
    std::priority_queue<int> pq;

    // 向优先级队列中插入元素
    pq.push(5);
    pq.push(2);
    pq.push(10);

    // 访问优先级队列的顶部元素
    std::cout << "Top element: " << pq.top() << std::endl;

    return 0;
}

//Top element: 10

 

(5)push() 在优先级队列中插入元素x

**  push()是C++中priority_queue容器的成员函数,用于将元素插入到优先级队列中。**

  以下是push()函数的定义和使用示例:

cpp 复制代码
#include <iostream>
#include <queue>

int main() {
    // 创建一个空的优先级队列
    std::priority_queue<int> pq;

    // 向优先级队列中插入元素
    pq.push(5);
    pq.push(2);
    pq.push(10);

    // 访问优先级队列的顶部元素
    std::cout << "Top element: " << pq.top() << std::endl;

    return 0;
}

//Top element: 10

 

(6)pop() 删除优先级队列中最大(最小)元素,即堆顶元素

**  pop()是C++中priority_queue容器的成员函数,用于删除优先级队列的顶部元素。**

  以下是pop()函数的定义和使用示例:

cpp 复制代码
#include <iostream>
#include <queue>

int main() {
    // 创建一个空的优先级队列
    std::priority_queue<int> pq;

    // 向优先级队列中插入元素
    pq.push(5);
    pq.push(2);
    pq.push(10);

    // 删除优先级队列的顶部元素
    pq.pop();

    // 访问优先级队列的新的顶部元素
    std::cout << "New top element: " << pq.top() << std::endl;

    return 0;
}

//New top element: 5
相关推荐
青瓦梦滋4 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp20199 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
pipixia2003310 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
牵猫散步的鱼儿13 小时前
C++ 内存分区
c++
choumin13 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
谙弆悕博士13 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
stolentime14 小时前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
syagain_zsx15 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官15 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
晚风予卿云月16 小时前
【C++高并发内存池】 1.定长内存池的实现
开发语言·c++·内存管理