@thi.ng/heaps
Version:
Various heap implementations for arbitrary values and with customizable ordering
41 lines • 2.06 kB
TypeScript
import type { IClear, ICopy, IEmpty, IInto, ILength, Pair, Predicate, Predicate2 } from "@thi.ng/api";
import type { PriorityQueueOpts } from "./api.js";
import { Heap } from "./heap.js";
/**
* Returns a new {@link PriorityQueue} instance, a thin veneer wrapper for a
* backing {@link Heap} and exposing a PQ-like API for arbitrary values, with
* configurable value equality handling and priority ordering.
*
* @remarks
*
* - By default higher priority values mean higher priority.
* - Already queued items can be reprioritized or removed.
* - The queue head can be inspected via `peek()` and/or `peekPriority()`
* without removing it from the queue.
* - Multiple items can be added at once via `into()`
* - The queue is iterable (in priority order, according to given comparator)
*/
export declare const defPriorityQueue: <T>(values?: Iterable<Pair<number, T>> | null, opts?: Partial<PriorityQueueOpts<T>>) => PriorityQueue<T>;
export declare class PriorityQueue<T> implements Iterable<Pair<number, T>>, IClear, ICopy<PriorityQueue<T>>, IEmpty<PriorityQueue<T>>, IInto<Pair<number, T>, PriorityQueue<T>>, ILength {
protected opts: Partial<PriorityQueueOpts<T>>;
heap: Heap<Pair<number, T>>;
equiv: Predicate2<T>;
constructor(values?: Iterable<Pair<number, T>> | null, opts?: Partial<PriorityQueueOpts<T>>);
get length(): number;
[Symbol.iterator](): Generator<Pair<number, T>, void, unknown>;
clear(): void;
copy(): PriorityQueue<T>;
empty(): PriorityQueue<T>;
push(val: T, priority: number): this;
pushPop(val: T, priority: number): import("@thi.ng/api").Maybe<Pair<number, T>>;
pop(): T | undefined;
peek(): T | undefined;
peekPriority(): number | undefined;
remove(val: T): boolean;
find(val: T): Pair<number, T> | undefined;
findWith(fn: Predicate<Pair<number, T>>): Pair<number, T> | undefined;
has(val: T): boolean;
into(values: Iterable<Pair<number, T>>): this;
reprioritize(val: T, priority: number): boolean;
}
//# sourceMappingURL=priority-queue.d.ts.map