普通队列

队列是一种先进先出(FIFO)的数据结构,即从尾部(队尾)进入,从头部进入

进队

使用push()函数进队,push()函数会将元素插入到队尾

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int main() {
    queue<int> a;
    a.push(10);
    a.push(20);
    a.push(30);
    a.push(40);
    cout << a.front();
    cout << a.back();
    return 0;
}

出队

使用pop()函数出队,pop()函数会将第一个元素出队

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int main() {
    queue<int> a;
    a.push(10);
    a.push(20);
    a.push(30);
    a.push(40);
    a.pop();
    a.pop();
    cout << a.front();
    cout << a.back();
    return 0;
}

其他函数

using namespace std;

int main() { queue a; a.push(10); a.push(20); a.push(30); a.push(40); cout << a.front() << "\n"; cout << a.back() << "\n"; cout << a.empty() << "\n"; cout << a.size() << "\n"; return 0; }


# 优先队列
优先队列主要优先级算法有区别,出队与一般的队列是一样的
## 定义
priority_queue<Type, Container, Functional>,第一个泛型是元素类型,第二个类型是,第三个类型是优先级算法
```c++
#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int main() {
    priority_queue<int, vector<int>, greater<int>> a;
    //priority_queue<int, vector<int>, greater<int>> a;
    a.push(10);
    a.push(40);
    a.push(90);
    a.push(6);
    a.push(100);
    while(!a.empty()) {
        cout << a.top() << "  ";
        a.pop();
    }
    return 0;
}

这是一个升序的队列,也就是优先数大的会放在队尾(我也不知道为什么)

他的输出是

6  10  40  90  100

如果元素是字符串类型的话会按首字母排序

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>

using namespace std;

int main() {
    priority_queue<string, vector<string>, greater<string>> a;
    a.push("hu");
    a.push("ab");
    a.push("bh");
    a.push("io");
    a.push("dhe");
    while(!a.empty()) {
        cout << a.top() << "  ";
        a.pop();
    }
    return 0;
}

输出是

ab  bh  dhe  hu  io

自定义优先级算法

自定义优先级主要是通过一个仿函数(我也不大清楚)来实现

#include <functional>
#include <queue>
#include <vector>
#include <iostream>

using namespace std;

template<typename T> void print_queue(T& q) {
    while(!q.empty()) {
        cout << q.top() << " ";
        q.pop();
    }
    cout << '\n';
}

int main() {
    priority_queue<int> q;

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q.push(n);

    print_queue(q);

    priority_queue<int, std::vector<int>, std::greater<int> > q2;

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q2.push(n);

    print_queue(q2);

    // Using lambda to compare elements.
    auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1);};
    priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q3.push(n);

    print_queue(q3);

}

🌹💗正文结束💗🌹