普通队列
队列是一种先进先出(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;
}
其他函数
- queue.front()访问第一个元素
- queue.back()访问最后一个元素
- queue.size()得到队列的长度
- queue.empty()返回队列是否为空,返回0表示不为空 ```cpp #include #include #include
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);
}
??正文结束??