属性和方法
std::priority_queue
是 C++ STL 中的一个容器适配器,它提供了一些基本属性和方法,用于管理基于优先级的队列。以下是 std::priority_queue
的主要属性和方法:
1. 构造函数
默认构造函数:
std::priority_queue<T>
:创建一个空的优先队列,其中T
是存储的数据类型。
带容器和比较函数的构造函数:
std::priority_queue<T, Container, Compare>
:创建一个指定底层容器和比较方式的优先队列,Container
默认是std::vector<T>
,Compare
默认是std::less<T>
(大顶堆)。
2. 属性
类型定义:
value_type
:存储的元素类型。container_type
:底层容器的类型(默认为std::vector<T>
)。size_type
:大小类型,用于存储优先队列中元素个数的数据类型。reference
:返回元素的引用类型。const_reference
:返回常量元素的引用类型。
3. 成员方法
3.1 元素访问
top()
:功能:返回队列中优先级最高的元素(对于大顶堆是最大元素)。
复杂度:O(1)。
示例:
3.2 容量相关
empty()
:功能:检查优先队列是否为空。如果为空,返回
true
,否则返回false
。复杂度:O(1)。
示例:
size()
:功能:返回优先队列中元素的数量。
复杂度:O(1)。
示例:
3.3 修改容器
push(const value_type& val)
:功能:将元素
val
插入到优先队列中。复杂度:O(log n),因为插入后需要维护堆结构。
示例:
emplace(Args&&... args)
:功能:原位构造一个对象并插入到优先队列中,避免了复制操作。
复杂度:O(log n)。
示例:
pop()
:功能:移除优先级最高的元素(对于大顶堆是最大元素)。
复杂度:O(log n),因为移除后需要维护堆结构。
示例:
3.4 交换内容
swap(priority_queue& other)
:功能:与另一个优先队列
other
交换元素。复杂度:O(1)。
示例:
4. 比较函数
std::priority_queue
的默认比较方式是 std::less<T>
,即大顶堆。如果需要自定义优先级,可以传入自定义的比较器,例如使用 std::greater<T>
实现小顶堆。
示例:使用 std::greater<T>
实现小顶堆
5. 总结
top()
返回优先级最高的元素(不移除)。
O(1)
push(const T& val)
插入新元素,并重新调整堆。
O(log n)
emplace(Args&&... args)
原位构造新元素并插入队列。
O(log n)
pop()
移除优先级最高的元素,并重新调整堆。
O(log n)
empty()
检查优先队列是否为空。
O(1)
size()
返回优先队列中的元素数量。
O(1)
swap(priority_queue& other)
交换两个优先队列的内容。
O(1)
std::priority_queue
是一个灵活的容器,适用于需要管理具有优先级的任务或数据的场景,如贪心算法、调度系统等。
Last updated