• 优先队列


    寻找队列中的最大值或最小值,出队。

    优先队列的底层实现:堆;(对于堆的底层实现,面试时经常会出)。

    C++中的优先队列容器:priority_queue

    1. 默认从大到小排列:(最大堆)

    #include <iostream>
    #include <queue>
    #include <ctime>
    using namespace std;
    
    int main() {
        srand(time(NULL));     //产生随机数
        priority_queue<int> pq;
        for (int i = 0; i < 10;i++) {
            int num = rand() % 100;
            pq.push(num);
            cout << "insert" << num << "in priority queue." << endl;
    
        }
        while (!pq.empty()) {
            cout << pq.top() << " ";
            pq.pop();
        }
        return 0;
    }

    2. 小顶堆

    #include <iostream>
    #include <queue>
    #include <ctime>
    using namespace std;
    
    int main() {
        srand(time(NULL));     //产生随机数
        priority_queue<int, vector<int>, greater<int> > pq2;   //最小堆,传入为int型,底层数据结构实现一般为vector,比较函数greater
    
        for (int i = 0; i < 10;i++) {
            int num = rand() % 100;
            pq2.push(num);
            cout << "insert" << num << "in priority queue." << endl;
        }
    
        while (!pq2.empty()) {
            cout << pq2.top() << " ";
            pq2.pop();
        }
        return 0;
    }

    3. 自定义比较函数:

    #include <iostream>
    #include <queue>
    #include <ctime>
    using namespace std;


    struct
    myCmp { bool operator()(int a, int b){ return a % 10 < b % 10; //比较个位数,个位数越大越靠前 } }; int main() { srand(time(NULL)); //产生随机数 priority_queue<int> pq; for (int i = 0; i < 10;i++) { int num = rand() % 100; pq.push(num); cout << "insert" << num << "in priority queue." << endl; } while (!pq.empty()) { cout << pq.top() << " "; pq.pop(); } cout << endl << endl; priority_queue<int, vector<int>, greater<int> > pq2; //底层是最小堆 for (int i = 0; i < 10;i++) { int num = rand() % 100; pq2.push(num); cout << "insert" << num << "in priority queue." << endl; } while (!pq2.empty()) { cout << pq2.top() << " "; pq2.pop(); } //使用自定义Comparator的priority queue priority_queue<int, vector<int>, myCmp> pq3; for (int i = 0; i < 10;i++) { int num = rand() % 100; pq3.push(num); cout << "insert" << num << "in priority queue." << endl; } while (!pq3.empty()) { cout << pq3.top() << " "; pq3.pop(); } return 0; }

  • 相关阅读:
    闲聊js中的apply、call和arguments
    字符串操作,文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式
    带你精读你不知道的Javasript(上)(一)
    益智小游戏看你能否通关?
    网站性能优化——网页的生成过程
    带着封装的思想顺便实现楼层点亮
    CSS3 傻傻分不清楚的transition, transform 和 animation
    图片轮播的思路
    如何处理跨平台的自适应三
  • 原文地址:https://www.cnblogs.com/Bella2017/p/10302560.html
Copyright © 2020-2023  润新知