C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

Posted MelroseQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)相关的知识,希望对你有一定的参考价值。

C++ 优先队列 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

定义 初始化一个优先队列

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

升序的使用pair的优先队列 默认对pair的第一个元素排序,所以建议数字放pair的第一个,用xx.first引用

//升序的使用pair的优先队列
priority_queue<pair<int, string>,vector<pair<int,string>>,greater<pair<int,string>> > pq;
//升序的使用pair的优先队列
priority_queue<pair<int, string>,vector<pair<int,string>>,less<pair<int,string>> > pq;

对pair结构体自定义排序

struct cmp
    template <typename T, typename U>
        bool operator()(T const &left, U const &right)
        
        // 以 second 比较。输出结果为 Second 较大的在前 Second 相同时,先进入队列的元素在前。 对pair第二个元素做降序排列 升序就反之
            return left.second > right.second;
        
    ;
    priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;

优先队列的API insert top erase都可以使用 下面介绍auto在其中的使用 只支持C++17以上

C++17结构化绑定 官方指南

假设我们有一个优先队列pq 我们要取队首 使用pq.top() 可以有两种写法

priority_queue<pair<int, string>,vector<pair<int,string>>,greater<pair<int,string>> > pq;
q.insert(make_pair(1,'a'));
q.insert(make_pair(2,'b'));

auto t1=q.top();
cout<<t1.first<<t1.second;//第一种

auto [num,name]=t1.top();//第二种 c++17以上

以上是关于C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)的主要内容,如果未能解决你的问题,请参考以下文章

C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

C++ STL:优先级队列priority_queue的使用方法和模拟实现

c++优先队列(priority_queue)用法详解

C++优先队列(priority_queue)

C++ 初阶优先级队列(Priority_Queue)底层框架模拟实现