请详细介绍下C加加的优先队列
时间: 2023-07-19 15:11:12 浏览: 101
C语言优先队列
C++的STL库中提供了优先队列容器(priority_queue),它是一种特殊的队列,它可以按照优先级自动排序并且每次弹出的元素都是当前队列中优先级最高的元素。
优先队列可以看作是一个堆(heap)数据结构的封装,堆是一种完全二叉树,它满足父节点的值总是大于等于(或小于等于)其子节点的值。
优先队列的常见操作包括插入元素、查看队首元素、弹出队首元素等。
下面是优先队列的一些操作和示例代码:
1. 创建一个空的优先队列:
```c++
priority_queue<int> pq;
```
2. 插入元素到队列中:
```c++
pq.push(5);
pq.push(3);
pq.push(8);
```
3. 查看队首元素:
```c++
int top_element = pq.top(); // top_element的值为8
```
4. 弹出队首元素:
```c++
pq.pop(); // 队列中的元素变为 5 3
```
优先队列的默认排序方式是大根堆,即优先级高的元素值越大。如果要定义小根堆,可以通过传入一个比较函数对象来实现,例如:
```c++
priority_queue<int, vector<int>, greater<int>> pq; // 定义小根堆
```
其中greater<int>是一个函数对象类型,用于比较两个int类型的元素大小。
阅读全文