#include <iostream>
#include <vector>
#include <queue>//这个头文件是队列的 包含两个很重要的数据结构 第一个数据结构是queue队列 第二个数据结构是priority_queue优先队列


using namespace std;

int main(){
    // queue<int> q;
    // queue<double> a;
    // struct Rec{
    //     int a, x, y;
    // };
    // queue<Rec> b;
    
    
    // 队列有一个性质就是先进先出 也就是如果我们按照123的顺序去插入的话 我们得用123的顺序去排出
    
    
    //与之相对的 有一个优先队列 优先队列是如下这个方式定义的
    queue<int> q;//队列
    //默认是一个大根堆
    priority_queue<int> a;//大根堆
    //如果希望小根堆 也就是队列默认返回一个最小值 需要加两个参数
    priority_queue<int, vector<int>, greater<int>> b;//小根堆
    
    
    // priority_queue<pair<int, int>> c;//可以换成其他的类型 pair是一个双关键字的 二元组?
    
    
    // struct Rec{
    //     int a, b;
    //     bool operator< (const Rec& t) const{//重载方式这么写 一定要重载小于号因为是大根堆
    //         return a < t.a;//表示a越大的结构体越大
    //     }
    // };
    // //如果要优先队列定义结构体的话一定要重载小于号
    // priority_queue<Rec> d;
    
    //默认大根堆重载小于号
    //如果用的是大根堆的话就要重载小于号 如果要用小根堆的话重载的是大于号
    
    struct Rec{
        int a, b;
        bool operator> (const Rec& t) const{
            return a > t.a;
        }
    };
    priority_queue<Rec, vector<Rec>, greater<Rec>> d;
    
    d.push({1, 2});
}