首页 > 编程语言 >【C++】priority_queue讲解

【C++】priority_queue讲解

时间:2024-09-10 14:52:12浏览次数:10  
标签:queue pq int C++ month priority Date

一、priority_queue的本质

priority_queue的本质就是堆,添加的元素按照堆的规则存储,默认情况下是大堆。

二、priority_queue的参数

priority_queue有三个参数。

int main() {
    priority_queue<int, vector<int>, less<int>> s;
    //第一个参数为要存放的数据类型
    //第二个参数为优先队列采用的底层结构(默认vector)
    //第三个参数判断建大堆还是小堆  
    //less<>表示建大堆(默认),greater<>表示建小堆
}

三、优先队列的使用

3.1、构造方式

int main() {
    priority_queue<int, vector<int>, less<int>> pq1;
    priority_queue<int, vector<int>> pq2(pq1);//拷贝构造
    priority_queue<int> pq3=pq1;//拷贝构造
    vector<int> v({1,2,3,4,5});
    priority_queue<int> pq4(v.begin(),v.end());//迭代器
    int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
    priority_queue<int> pq5(a,a+10);//也是迭代器
}

3.2优先队列的函数

empty:判断优先队列是否为空

size:返回优先队列存储元素的个数

top:返回队头元素

push:添加元素

pop:删除头顶元素

三、内置类型的存储

内置类编译器无法进行比较,所以需要我们自己实现一个比较的仿函数。(重载“()”就是仿函数)

class Date
{
public:
    Date(int d=1, int m =1):day(d),month(m)
    {

    };
public:
    int day;
    int month;
};
//自己实现Date类型的比较
template<class T>
class Myless
{
public:
    bool operator() (const T& a, const T& b)
    {
        if (a.month != b.month)
        {
            if (a.month > b.month)
            {
                return true;
            }
            return false;
        }
        else
        {
            if (a.day > b.day)
            {
                return true;
            }
            return false;
         }
    }
};
int main() {
    priority_queue<Date,vector<Date>,Myless<Date>> pq;
    pq.push(Date(2, 3));
    pq.push(Date(4, 2));
    pq.push(Date(1, 22));
    pq.push(Date(6, 21));
}

标签:queue,pq,int,C++,month,priority,Date
From: https://blog.csdn.net/2401_83733103/article/details/142097258

相关文章

  • C++学习笔记(14)
    二、栈解旋异常被抛出后,从进入try语句块开始,到异常被抛出之前,这期间在栈上构造的所有对象,都会被自动析构。析构的顺序与构造的顺序相反。这一过程称为栈的解旋。也就是在执行throw前,在try执行期间构造的所有对象被自动析构后,才会进入catch匹配。在堆上构造的对象肿......
  • C/C++面试
    文章目录第一章C++基本语法C++和C的区别为什么C++支持函数重载而C语言不支持呢include头文件双引号””和尖括号<>的区别头文件的作用是什么?在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?C++源文件从文本到可执行文件经历的过程静态链接与动态链接C......
  • C++:拷贝构造函数、赋值运算符重载
    目录一、拷贝构造函数拷贝构造的特点二、赋值运算符重载2.1运算符重载2.2赋值运算符重载赋值运算符重载的特点一、拷贝构造函数  如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是......
  • C++的数据类型----标准库类型(std::vector容器/std::list容器/std::map容器)的实例讲解
    目录1.字符串(std::string):用于处理文本字符串。2.容器:如std::vector、std::list、std::map等,用于存储和管理数据集合2.1std::vector容器2.2std::list容器2.3std::map容器1.字符串(std::string):用于处理文本字符串。下面是一个C++中字符串的示例程序......
  • 【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)
    “秒懂”学C/C++不可错过的“经典编程题”—日期类的经典运用(含题链接)1.计算日期到天数转换(1).解题思路:(2).代码实现:2.打印日期(1).解题思路:(2).代码实现:3.日期累加(1).解题思路:(2).代码实现:4.日期差值(1).解题思路:(2).代码实现:1.计算日期到天......
  • 本周新上技术岗:Java/C/C++/GO语言/测试开发,月薪最高40K!
    本周新上技术岗位推荐,Java/C++/GO语言/前后端开发等高薪岗位招人啦,外企招人不加班,月薪最高40K,还不快来!!抓紧投递,早投早入职!......
  • MATLAB与C++参数传递(最完整)
    目录前言数据传递传递单个数据传递矩阵传递字符串传递结构体前言通常将MATLAB代码打包为.dll,.lib,.h文件供C++调用。而MATLAB通常用于算法的编写,输出只需要一个数组。打开一个MATLAB打包生成的.h文件,可以看到注册了这样一个函数。externLIB_SKD_CPP_APIvoidMW_......
  • 【机器学习】C++与OpenCV实战:创建你的第一个图片显示程序
    ......
  • C++ 如何检查两个给定的线段是否相交(How to check if two given line segments inters
    给定两条线段(p1,q1)和(p2,q2),判断给定的线段是否相交。在讨论解决方案之前,让我们先定义方向的概念。平面中有序点三元组的方向可以是 –逆时针 –顺时针 –共线 下图显示了(a,b,c)的不同可能方向 方向在这里有什么用处? 两条线段(p1,q1)和(p2,q2)相交,当且仅当以下......
  • C++ 之 perf+火焰图分析与调试
    简介在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。1.Perf基础1.1Perf简介perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。利用perf剖析程序性能时,需要指定当前测......