队列、优先队列

队列和优先队列的基本操作

/*
-------------------------------------------------
   Author:       wry
   date:         2022/2/26 18:56
   Description:  Queue
-------------------------------------------------
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int arr[10] = {1,2,3,4,5,6,7,8,9,10}

    //普通队列
    queue<int> Queue;

    for (int i=0;i<10;i++) {
        Queue.push(arr[i]);
    }

    int sum=0;
    if (!Queue.empty()) {
        sum += Queue.front();    //pop()只会弹出,front()可以输出
        Queue.pop();
    }

    //优先队列(堆排序)
    priority_queue<int> myPriorityQueue;    //大根堆,动态地降序排序
    priority_queue<int,vector<int>,greater<int>> ReversemyPriorityQueue;    //小根堆,动态地升序排序
    
    for (int i=0;i<10;i++) {
        myPriorityQueue.push(arr[i]);
    }
    for (int i=0;i<10;i++) {
        ReversemyPriorityQueue.push(arr[i]);
    }
    
    sum=0;
    while (!myPriorityQueue.empty()) {
        sum += myPriorityQueue.top();     //大根堆每次取得都是最大的
        myPriorityQueue.pop();
    }
    sum=0;
    while (!ReversemyPriorityQueue.empty()) {
        sum += ReversemyPriorityQueue.top();
        ReversemyPriorityQueue.pop();
    }
    
    return 0;
}

  

优先队列的复杂操作——结构体自动排大小,需要重写符号operator

struct Complex {
    int a;
    int b;
    Complex(int x,int y):a(x),b(y){}
    bool operator< (Complex test) const {    //<比较的是优先级
        if (a==test.a) {
            //这种情况下,只有在b>test.b下,才能在优先级上?<test
            return b > test.b;    //如果a相同,如果test的b更小,则更优先输出(优先级大)
        }
        else {
            //这种情况下,只有在a<test.a下,才能?<test
            return a < test.a;    //如果a不同,a越大优先级越高
        }
    }
};

  

 

posted @ 2022-02-26 20:26  火星架构师  阅读(40)  评论(0编辑  收藏  举报