深入了解C++优先队列(priority_queue)的使用方法

深入了解C++优先队列(priority_queue)的使用方法

什么是优先队列?

优先队列(Priority Queue)是一种数据结构,其本质是一个队列,但是队列中的元素都被赋予了优先级。优先级最高的元素最先被取出。

C++的优先队列(priority_queue)的用法

在C++中,优先队列(priority_queue)类定义在头文件中,其基本用法如下:

#include <queue>

std::priority_queue<T> pq; // 定义一个优先队列

其中,T代表队列中元素的类型。优先队列默认按照less从大到小排序,即优先级最高的元素为最大的元素。如果需要按照从小到大排序,则需要定义greater

std::priority_queue<int, std::vector<int>, std::greater<int>> pq; // 按照从小到大排序

push和pop

向优先队列中添加元素可通过push函数实现:

pq.push(10); 
pq.push(20); 
pq.push(30); 

从优先队列中取出元素可通过pop函数实现:

pq.pop(); // 取出最大的元素

top和empty

查看优先队列中最高优先级的元素可通过top函数实现:

std::cout << pq.top(); // 输出最大的元素

判断优先队列是否为空可通过empty函数实现:

if (pq.empty()) {
    std::cout << "优先队列为空";
}

示例1:使用优先队列来维护一个最大值队列

给定一个整型序列,我们需要动态维护其中的最大值。可以使用优先队列来实现:

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main()
{
    vector<int> v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};

    priority_queue<int> q; // 定义一个优先队列

    for (int i = 0; i < v.size(); i++) {
        q.push(v[i]); // 将元素加入队列中
        cout << q.top() << " "; // 输出队列中的最大值
    }

    return 0;
}

输出结果为:

3 3 4 4 5 5 5 6 6 6 6

示例2:使用优先队列来实现堆排序

在堆排序中,利用最大堆或最小堆实现排序。使用优先队列来实现最大堆或最小堆,从而达到排序的效果:

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main()
{
    vector<int> v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};

    priority_queue<int> q; // 定义一个最大堆

    for (int i = 0; i < v.size(); i++) {
        q.push(v[i]); // 将元素加入最大堆中
    }

    while (!q.empty()) {
        cout << q.top() << " "; // 从最大堆中取出元素
        q.pop();
    }

    return 0;
}

输出结果为:

9 6 5 5 5 4 3 3 2 1 1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入了解C++优先队列(priority_queue)的使用方法 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++获取MD5算法实现代码

    获取MD5算法实现代码的完整攻略可以分为以下几步: 步骤一:了解MD5算法 MD5算法是一种哈希算法,它将任意长度的数据(字节序列)映射为固定长度(128位)的数据,通常表示为32位16进制数。在C++中,可以使用第三方库或自己编写代码来实现MD5算法。 步骤二:选择MD5库 有很多开源的MD5库可供选择,常用的有: OpenSSL:一个通用的加密库,包含各…

    C 2023年5月24日
    00
  • 详解SQL Server 中 JSON_MODIFY 的使用

    详解SQL Server 中 JSON_MODIFY 的使用 简介 在 SQL Server 2016 中,引入了 JSON 数据类型和一些新的 JSON 函数,其中之一是 JSON_MODIFY,它是一种修改 JSON 数据的函数。 在本文中,我们将详细介绍 JSON_MODIFY 函数的使用方法,包括语法、参数和示例。 语法 JSON_MODIFY 函数…

    C 2023年5月23日
    00
  • jQuery使用getJSON方法获取json数据完整示例

    下面是关于”jQuery使用getJSON方法获取json数据完整示例”的完整攻略: 1. 简介 在Web开发中,经常需要使用Ajax技术从服务器获取数据并进行显示或其他操作。其中,获取的数据可能是JSON格式的数据,应对这种需求,jQuery提供了一个getJSON()方法来处理JSON数据。 2. getJSON()方法说明 方法语法 $.getJSON…

    C 2023年5月23日
    00
  • C/C++从零开始的cmake教程

    下面是C/C++从零开始的CMake教程的完整攻略: 1 概述 CMake是一个非常流行的跨平台的构建系统,它能够自动生成Makefile或者Visual Studio等工具所需要的工程文件。 相信大家对Makefile都不陌生,如果要手动写Makefile,需要一定的经验和技巧,很容易出错,而且维护成本比较高。 而CMake则是一个更加高级的工具,它的语法…

    C 2023年5月23日
    00
  • C语言代码实现简单2048游戏

    C语言代码实现简单2048游戏攻略 简介 在这篇攻略中,我将教您如何使用C语言编写简单的2048游戏。2048是一个流行的数字益智游戏,目标是在一个4×4的方格中合并数字,并达到最大的数字2048。在这个过程中,我们将使用C语言并结合控制流和数组等知识点来完成我们的游戏。 步骤 步骤1:定义游戏棋盘 在2048游戏中,我们需要定义一个4×4的棋盘来存储游戏状…

    C 2023年5月23日
    00
  • javascript对JSON数据排序的3个例子

    JavaScript对JSON数据排序的3个例子 在JavaScript中,我们可以使用sort()方法对JSON数据进行排序。sort()方法是数组的一个原生方法,可以按照一定规则对数组进行排序。本文将通过三个例子详细讲解如何使用sort()方法对JSON数据进行排序。 例子1:按照数字大小排序 var data = [ { name: ‘John’, a…

    C 2023年5月23日
    00
  • Java Exception异常全方面分析

    Java Exception异常全方面分析 Java中异常是程序运行中发生的错误或者异常情况的标志,有时我们无法避免由于代码本身的错误或者外在因素导致程序发生异常。因此,掌握异常的相关知识,在开发过程中是非常必要的。 本文将全方面地讲解Java中异常的相关知识,包括异常的类型、异常处理、异常抛出与捕获等内容,旨在帮助Java开发者更好地理解和使用异常。 异常…

    C 2023年5月23日
    00
  • C语言 strspn()函数

    当我们需要检测两个字符串之间共有的字符时,可以使用C语言的strspn()函数。该函数返回字符串中的字符数目,直到字符串中的第一个不属于目标字符集合的字符(即停止搜索的字符)被检测到。以下是关于该函数的详细使用攻略。 函数原型 size_t strspn(const char *str1, const char *str2); 该函数接受两个参数:str1和…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部