C++ 优先队列(Priority Queue)详解
在 C++ 编程中,数据结构是处理数据的核心工具。在众多结构中,**优先队列(Priority Queue)**因其独特的排序机制而占据重要地位。与普通队列不同,它不遵循先进先出(FIFO)原则,而是根据元素的优先级进行调度。
一、优先队列的概念
想象一个特殊的队伍,成员不是按到达顺序排队,而是根据'重要性'标签排列。例如医院急诊室,重伤患者会优先得到救治。优先队列正是如此:优先级最高的元素始终位于队首,随时准备被处理。
二、C++ 中的使用方式
1. 默认行为:最大堆
C++ STL 提供的 priority_queue 类默认实现的是大顶堆。包含 <queue> 头文件后,最大的元素会自动排在队首。
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> pq;
pq.push(5);
pq.push(10);
pq.push(3);
std::cout << "队首元素(最大值): " << pq.top() << std::endl;
pq.pop();
std::cout << "队首元素(最大值): " << pq.top() << std::endl;
return 0;
}
每次 push 都会自动调整堆结构,top 获取当前最大值,pop 移除队首元素。
2. 自定义规则:最小堆
若需小顶堆(最小值在队首),可定义比较函数或函数对象。
#include <iostream>
#include <queue>
#include <vector>
struct Compare {
bool {
a > b;
}
};
{
std::priority_queue<, std::vector<>, Compare> pq;
pq.();
pq.();
pq.();
std::cout << << pq.() << std::endl;
;
}


