proirity_queue

C++ STL 中的 priority_queue(优先队列)是一种特殊的队列,其元素会自动按优先级排序,每次取出的都是当前优先级最高的元素(默认是最大元素)。 基本特点: 基于堆(heap)实现,插入和提取操作的时间复杂度为 O (log n) 默认是大顶堆(最大值优先) 只能访问顶部元素,不能随机访问 基本用法示例:

运行
#include <iostream>
#include <queue>  // 包含头文件

int main() {
    // 1. 创建优先队列(默认大顶堆)
    std::priority_queue<int> pq;

    // 2. 插入元素
    pq.push(30);
    pq.push(10);
    pq.push(50);
    pq.push(20);

    // 3. 访问和提取元素(每次取最大的)
    while (!pq.empty()) {
        std::cout << pq.top() << " ";  // 访问顶部元素
        pq.pop();                      // 移除顶部元素
    }
    // 输出:50 30 20 10

    return 0;
}
### 常用变种:
cpp
运行
// 小顶堆(最小值优先)
std::priority_queue<int, std::vector<int>, std::greater<int>> minPq;

// 存储自定义类型(需定义比较规则)
struct Person {
    int age;
    bool operator<(const Person& other) const {
        return age < other.age;  // 年龄大的优先级高
    }
};

std::priority_queue<Person> pq;

核心接口:

push():插入元素 top():访问优先级最高的元素 pop():移除优先级最高的元素 size():获取元素个数 empty():判断是否为空

与queue的区别

优先队列和普通队列的核心区别在于元素的取出顺序,具体差异如下:

特性 普通队列(queue) 优先队列(priority_queue)
取出顺序 先进先出(FIFO) 按优先级(默认最大元素先出)
底层实现 通常基于链表或数组 基于堆(heap)结构
访问方式 只能访问队首元素 只能访问优先级最高的元素
插入 / 删除效率 O(1) O(log n)
适用场景 按顺序处理任务(如打印队列) 需要动态获取最大 / 最小值的场景(如调度系统)

简单说: 普通队列像排队买票,先到的先处理 优先队列像医院急诊,优先级高的(如病情严重的)先处理 例如,普通队列插入 [1,3,2] 后,取出顺序是 1→3→2;而优先队列会按优先级取出 3→2→1(默认大顶堆)。