队列、优先队列
队列和优先队列的基本操作
/*
-------------------------------------------------
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越大优先级越高 } } };