admin管理员组

文章数量:1624351

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以上

本文标签: 结构化队列绑定pairpriorityqueue