<queue> 是 C++ STL 库中的一个标准头文件,它提供了队列(queue)和优先队列(priority_queue)的实现,使得程序员在编写程序时可以更加简单方便地使用队列。
队列是一种先进先出(FIFO)的数据结构,也就是说,在队列中,所有的元素都是从队尾插入,从队头删除的。优先队列也是一个队列,但是它的元素是按照一定的优先级排序的,优先级高的元素排在队列的前面。
<queue> 头文件提供的队列和优先队列都是模板类,可以存储各种类型的元素。下面是一些 queue 和 priority_queue 的常用方法:
-
push() 方法:在队列或者优先队列中插入一个新元素。
-
pop() 方法:删除队列或者优先队列中的第一个元素。
-
front() 方法:返回队列或者优先队列中的第一个元素的引用。
-
back() 方法:返回队列或者优先队列中的最后一个元素的引用。
-
empty() 方法:判断队列或者优先队列是否为空。
-
size() 方法:返回队列或者优先队列中元素的个数。
下面是一些使用队列和优先队列的实例:
- 使用 queue 实现 BFS(广度优先搜索):
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[10001];
bool vis[10001];
void bfs(int s) {
queue<int> q;
q.push(s);
vis[s] = true;
while (!q.empty()) {
int v = q.front();
q.pop();
for (int i = 0; i < adj[v].size(); i++) {
int u = adj[v][i];
if (!vis[u]) {
q.push(u);
vis[u] = true;
}
}
}
}
int main() {
// ...
return 0;
}
- 使用 priority_queue 实现 Dijkstra(最短路径算法):
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> adj[10001];
priority_queue<pair<int, int>> pq;
int dis[10001];
void dijkstra(int s) {
memset(dis, 0x3f, sizeof(dis));
dis[s] = 0;
pq.push(make_pair(0, s));
while (!pq.empty()) {
int d = -pq.top().first;
int v = pq.top().second;
pq.pop();
if (dis[v] < d) continue;
for (int i = 0; i < adj[v].size(); i++) {
int u = adj[v][i].first;
int w = adj[v][i].second;
if (dis[u] > dis[v] + w) {
dis[u] = dis[v] + w;
pq.push(make_pair(-dis[u], u));
}
}
}
}
int main() {
// ...
return 0;
}
以上是使用 <queue> 实现队列和优先队列的一些方法和示例。