Documentation
¶
Index ¶
- type PriorityQueue
- func (pq *PriorityQueue[T]) Dequeue() (T, bool)
- func (pq *PriorityQueue[T]) Enqueue(item T) bool
- func (pq *PriorityQueue[T]) EnqueueBatch(items []T) (failed []T, ok bool)
- func (pq *PriorityQueue[T]) IsEmpty() bool
- func (pq *PriorityQueue[T]) IsFull() bool
- func (pq *PriorityQueue[T]) Len() int
- func (pq *PriorityQueue[T]) Less(i, j int) bool
- func (pq *PriorityQueue[T]) Peek() (T, bool)
- func (pq *PriorityQueue[T]) Pop() any
- func (pq *PriorityQueue[T]) Push(x any)
- func (pq *PriorityQueue[T]) RemoveIf(predicate func(T) bool) bool
- func (pq *PriorityQueue[T]) Size() int
- func (pq *PriorityQueue[T]) Swap(i, j int)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type PriorityQueue ¶
type PriorityQueue[T any] struct { // contains filtered or unexported fields }
PriorityQueue 泛型优先队列
func NewPriorityQueue ¶
func NewPriorityQueue[T any](less func(a, b T) bool, capacity int) *PriorityQueue[T]
NewPriorityQueue 创建优先队列【支持批量入队】 capacity <= 0 表示无界队列;>0 表示有界队列(最大容量为 capacity)
func (*PriorityQueue[T]) Dequeue ¶
func (pq *PriorityQueue[T]) Dequeue() (T, bool)
Dequeue 出队堆顶元素
- 【已加锁】
func (*PriorityQueue[T]) Enqueue ¶
func (pq *PriorityQueue[T]) Enqueue(item T) bool
Enqueue 入队单个元素,有界队列满时返回 false
- 【已加锁】
- 返回 true :入队成功
func (*PriorityQueue[T]) EnqueueBatch ¶
func (pq *PriorityQueue[T]) EnqueueBatch(items []T) (failed []T, ok bool)
EnqueueBatch 批量入队,返回每个元素是否成功入队
- 【已加锁】
- 有界队列:按顺序尝试入队,满则后续全部失败
- 无界时永远 ok = true,性能无损
返回:
- failed: 未能入队的元素列表(按原顺序)
- ok: true 表示全部成功(failed 为空),false 表示有失败
对于有界队列:按顺序入队,一旦队列满,剩余元素全部视为失败。 对于无界队列:always ok = true, failed = nil。
func (*PriorityQueue[T]) IsEmpty ¶
func (pq *PriorityQueue[T]) IsEmpty() bool
IsEmpty 判断是否为空
- 【已加锁】
- 返回 true :队列为空
func (*PriorityQueue[T]) IsFull ¶
func (pq *PriorityQueue[T]) IsFull() bool
IsFull 仅对有界队列有意义
- 【已加锁】
- 返回 true 表示已满
func (*PriorityQueue[T]) Len ¶
func (pq *PriorityQueue[T]) Len() int
Len 返回当前元素数量
- 【未加锁,请使用Size,尽量使用下面加锁API保证线程安全】
func (*PriorityQueue[T]) Less ¶
func (pq *PriorityQueue[T]) Less(i, j int) bool
Less 比较两个元素
- 【未加锁,尽量使用下面加锁API保证线程安全】
func (*PriorityQueue[T]) Pop ¶
func (pq *PriorityQueue[T]) Pop() any
Pop 供 heap.Pop 调用,只负责弹出最后一个元素(不加锁!)
- 【未加锁,请使用Dequeue,尽量使用下面加锁API保证线程安全】
func (*PriorityQueue[T]) Push ¶
func (pq *PriorityQueue[T]) Push(x any)
Push 供 heap.Push 调用,只负责追加元素(不加锁!)
- 【未加锁,请使用Enqueue,尽量使用下面加锁API保证线程安全】
func (*PriorityQueue[T]) RemoveIf ¶
func (pq *PriorityQueue[T]) RemoveIf(predicate func(T) bool) bool
RemoveIf 删除第一个满足条件的元素
- 【已加锁】
func (*PriorityQueue[T]) Swap ¶
func (pq *PriorityQueue[T]) Swap(i, j int)
Swap 交换两个元素
- 【未加锁,尽量使用下面加锁API保证线程安全】
Click to show internal directories.
Click to hide internal directories.