zoukankan      html  css  js  c++  java
  • priority_queue()大根堆和小根堆(二叉堆)

    #include<iostream>
    #include <queue>
    using namespace std;
    int main() 
    {
        //对于基础类型 默认是大顶堆
        priority_queue<int> a; 
        //等同于 priority_queue<int, vector<int>, less<int> > a;
        
        //             这里一定要有空格,不然成了右移运算符↓
        priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆
        priority_queue<string> b;
    
        for (int i = 0; i < 5; i++) 
        {
            a.push(i);
            c.push(i);
        }
        while (!a.empty()) 
        {
            cout << a.top() << ' ';
            a.pop();
        } 
        cout << endl;
    
        while (!c.empty()) 
        {
            cout << c.top() << ' ';
            c.pop();
        }
        cout << endl;
    
        b.push("abc");
        b.push("abcd");
        b.push("cbd");
        while (!b.empty()) 
        {
            cout << b.top() << ' ';
            b.pop();
        } 
        cout << endl;
        return 0;
    }

    优先队列实质就是堆实现的;

    默认的定义优先队列是大根堆,即父节点的值大于子节点的值。

     priority_queue<int> a; 
        //等同于 priority_queue<int, vector<int>, less<int> > a;
    当然也可以定义小根堆:
    priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆
    将pair加入到队列中:
    priority_queue<pair<int, int> > a;//先比较first 再比较second

    对于优先队列的操作;
    top 访问队头元素
    empty 队列是否为空
    size 返回队列内元素个数
    push 插入元素到队尾 (并排序)
    emplace 原地构造一个元素并插入队列
    pop 弹出队头元素
    swap 交换内容
    只能从队列后边加入,从队列前边拿出,在遍历的时候可以通过p.size()或者p.empty();
    摘抄自自博客https://blog.csdn.net/weixin_36888577/article/details/79937886
  • 相关阅读:
    2018/03/27 每日一个Linux命令 之 cron
    2018/03/26 每日一个Linux命令 之 du
    《Nginx
    学习计划 mysql explain执行计划任务详解
    方法覆盖
    二维数组中的查找
    oracle导入少量数据(少于10M)
    hive计算日期差
    查看文件编码格式以及更改编码
    java io流
  • 原文地址:https://www.cnblogs.com/zwx7616/p/11277341.html
Copyright © 2011-2022 走看看