C++ 容器适配器priority_queue的使用及实现代码

下面我将详细讲解“C++ 容器适配器priority_queue的使用及实现代码”的完整攻略,包括定义与使用、成员函数及示例说明。

定义与使用

priority_queue 是一个容器适配器,它提供了队列的功能,但是元素被自动排序(默认为按元素值从大到小)。

在使用 priority_queue 之前,需要引用头文件 <queue> ,并使用命名空间 std

定义 priority_queue 的语法如下:

priority_queue <type, container, functional>

其中,type 为存储在队列中的元素类型;container 为存储元素的底层容器,默认为 vector<type>functional 为比较元素的方法,默认为 less<type>,即按元素值从大到小排序。如果要按元素值从小到大排序,可以使用 greater<type>

priority_queue 支持以下成员函数:

  • push():在队尾插入一个元素;
  • pop():移除队首元素;
  • top():返回队首元素;
  • empty():判断队列是否为空;
  • size():返回队列中元素的个数。

下面是一个简单的示例:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;
    return 0;
}

示例输出:

3 2 1

成员函数说明

push()

void push(const value_type& val)

在队尾插入一个元素,插入完成后将自动排序。

示例代码:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;
    return 0;
}

示例输出:

3 2 1

pop()

void pop()

移除队首元素。

示例代码:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    pq.pop();
    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;
    return 0;
}

示例输出:

2 1

top()

const_reference top() const

返回队首元素。

示例代码:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    cout << pq.top() << endl;
    return 0;
}

示例输出:

3

empty()

bool empty() const

判断队列是否为空。

示例代码:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    cout << pq.empty() << endl;
    pq.pop();
    cout << pq.empty() << endl;
    return 0;
}

示例输出:

0
1

size()

size_type size() const

返回队列中元素的个数。

示例代码:

#include <iostream>
#include <queue>

using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(1);
    pq.push(3);
    pq.push(2);
    cout << pq.size() << endl;
    return 0;
}

示例输出:

3

示例说明

下面是另一个示例,演示如何将 priority_queue 的排序规则改为按照长度从小到大排序。

#include <iostream>
#include <queue>
#include <string>

using namespace std;

struct cmp {
    bool operator()(const string& a, const string& b) {
        return a.length() > b.length();
    }
};

int main() {
    priority_queue<string, vector<string>, cmp> pq;
    pq.push("hello");
    pq.push("world");
    pq.push("C++");
    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;
    return 0;
}

示例输出:

C++ hello world

在这个示例中,我们在定义 priority_queue 时使用了自定义比较方法 cmpcmp 重载了 () 操作符,使得排序规则变为按照元素长度从小到大排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 容器适配器priority_queue的使用及实现代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 路由器ip地址冲突怎么办? 电脑弹出windows系统错误的解决办法

    路由器IP地址冲突的解决办法 当路由器的IP地址与其他设备冲突时,可能会导致网络连接问题。下面是解决路由器IP地址冲突的完整攻略,包括两个示例说明。 步骤1:确认IP地址冲突 首先,我们需要确认是否存在IP地址冲突。以下是确认IP地址冲突的步骤: 打开命令提示符(Windows用户可以按下Win + R,然后输入\”cmd\”并按下回车键)。 在命令提示符中…

    other 2023年7月31日
    00
  • php ckeditor上传图片文件名乱码解决方法

    下面是详细讲解“php ckeditor上传图片文件名乱码解决方法”的完整攻略。 问题描述 在使用php ckeditor上传图片时,如果图片文件名带有中文,就会出现乱码的情况,导致无法正确显示图片。 解决方法 通过对上传的图片文件名进行转码,可以解决乱码的问题。具体步骤如下: 1. 获取上传的文件名 首先,我们需要获取上传的图片文件名。在php中,可以使用…

    other 2023年6月26日
    00
  • java面向对象的三大特性之一继承用法实例分析

    Java面向对象的三大特性之一是继承,继承是指子类继承父类的属性和方法,这是代码重用的核心。继承用法的实例分析可以通过以下步骤进行,包括创建父类和子类,使用super关键字引用父类的方法和属性,对子类的属性和方法进行修改和继承等。 步骤一:创建父类和子类 创建父类,可以使用关键字class,后跟类名和一对大括号{},父类中需要定义一些属性和方法。例如: pu…

    other 2023年6月27日
    00
  • Centos修改DNS重启或重启network服务后丢失问题解决方法

    Centos修改 DNS 重启或重启 network 服务后丢失问题解决方法 在 CentOS 上修改 DNS 后,重启或重启网络服务后可能会丢失 DNS 设置。本文将详细讲解解决方法。 问题描述 当在 CentOS 上配置 DNS 时,可能需要修改 /etc/resolv.conf 文件。然而,当重启或重启 network 服务时,这些设置会被重置为默认值…

    other 2023年6月27日
    00
  • 详解Java递归实现树形结构的两种方式

    详解Java递归实现树形结构的两种方式 引言 在Java程序中,树型结构是十分常见的,如目录结构、部门结构等等。而递归则是处理树型结构时最为常用的方式之一。本文将详细讲解Java如何递归实现树形结构,介绍两种不同的实现方式,并给出相应的代码示例。 方式一:使用递归函数进行深度优先遍历 递归函数是一个在函数内部调用自身的过程。使用递归函数可以方便地遍历树形结构…

    other 2023年6月27日
    00
  • jquery插件ContextMenu设置右键菜单

    以下是详细讲解“jquery插件ContextMenu设置右键菜单”的完整攻略: 简介 ContextMenu是一款基于jQuery的插件,可用于在网页上创建自定义的右键菜单。通过使用ContextMenu,您可以轻松添加上下文菜单到任何元素上,这些菜单会在用户右键单击该元素时弹出。 安装 可以通过下面的命令将ContextMenu的最新版本添加到您的项目中…

    other 2023年6月27日
    00
  • security-constraint解决-启用不安全的http方法

    在Java Web应用程序中,可以使用security-constraint元素来限制对Web资源的访问。其中一个常见的用途是禁用不安全的HTTP方法,例如PUT和DELETE。以下是关于如何使用security-constraint元素解决启用不安全的HTTP方法的完整攻略,包括语法、用法和两个示例说明。 语法 在web.xml文件中使用security-…

    other 2023年5月9日
    00
  • Android使用ViewFlipper实现上下滚动消息

    Android使用ViewFlipper实现上下滚动消息攻略 简介 ViewFlipper是Android中的一个布局容器,它可以让子视图在容器内进行切换显示。通过使用ViewFlipper,我们可以实现上下滚动消息的效果。 步骤 步骤一:添加ViewFlipper到布局文件 首先,在你的布局文件中添加一个ViewFlipper容器,如下所示: <Vi…

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