Table of Contents

Class PriorityQueue<TPriority, TElement>

Namespace
Ecng.Collections
Assembly
Ecng.Collections.dll

Represents a min priority queue.

public class PriorityQueue<TPriority, TElement> : ICollection<(TPriority, TElement)>, IEnumerable<(TPriority, TElement)>, IEnumerable, IQueue<(TPriority priority, TElement element)>

Type Parameters

TPriority

Specifies the type of priority associated with enqueued elements.

TElement

Specifies the type of elements in the queue.

Inheritance
PriorityQueue<TPriority, TElement>
Implements
ICollection<(TPriority, TElement)>
IEnumerable<(TPriority, TElement)>
IQueue<(TPriority priority, TElement element)>
Inherited Members
Extension Methods

Remarks

Implements an array-backed quaternary min-heap. Each element is enqueued with an associated priority that determines the dequeue order: elements with the lowest priority get dequeued first.

Constructors

PriorityQueue(Func<TPriority, TPriority, TPriority>)

Initializes a new instance of the PriorityQueue<TPriority, TElement> class.

public PriorityQueue(Func<TPriority, TPriority, TPriority> subtractAbs)

Parameters

subtractAbs Func<TPriority, TPriority, TPriority>

PriorityQueue(Func<TPriority, TPriority, TPriority>, IComparer<TPriority>)

Represents a min priority queue.

public PriorityQueue(Func<TPriority, TPriority, TPriority> subtractAbs, IComparer<TPriority> comparer)

Parameters

subtractAbs Func<TPriority, TPriority, TPriority>

The function that calculates the absolute difference between two priorities.

comparer IComparer<TPriority>

Custom comparer dictating the ordering of elements. Uses Default if the argument is null.

Remarks

Implements an array-backed quaternary min-heap. Each element is enqueued with an associated priority that determines the dequeue order: elements with the lowest priority get dequeued first.

Properties

Comparer

Gets the priority comparer used by the PriorityQueue<TPriority, TElement>.

public IComparer<TPriority> Comparer { get; }

Property Value

IComparer<TPriority>

Count

Gets the number of elements contained in the PriorityQueue<TPriority, TElement>.

public int Count { get; }

Property Value

int

Methods

Clear()

Removes all items from the PriorityQueue<TPriority, TElement>.

public void Clear()

Dequeue()

Removes and returns the minimal element from the PriorityQueue<TPriority, TElement>.

public (TPriority priority, TElement element) Dequeue()

Returns

(TPriority priority, TElement element)

The minimal element of the PriorityQueue<TPriority, TElement>.

Exceptions

InvalidOperationException

The queue is empty.

DequeueEnqueue(TPriority, TElement)

Removes the minimal element and then immediately adds the specified element with associated priority to the PriorityQueue<TPriority, TElement>,

public TElement DequeueEnqueue(TPriority priority, TElement element)

Parameters

priority TPriority

The priority with which to associate the new element.

element TElement

The element to add to the PriorityQueue<TPriority, TElement>.

Returns

TElement

The minimal element removed before performing the enqueue operation.

Remarks

Implements an extract-then-insert heap operation that is generally more efficient than sequencing Dequeue and Enqueue operations: in the worst case scenario only one shift-down operation is required.

Exceptions

InvalidOperationException

The queue is empty.

Enqueue(TPriority, TElement)

Adds the specified element with associated priority to the PriorityQueue<TPriority, TElement>.

public void Enqueue(TPriority priority, TElement element)

Parameters

priority TPriority

The priority with which to associate the new element.

element TElement

The element to add to the PriorityQueue<TPriority, TElement>.

EnqueueDequeue(TPriority, TElement)

Adds the specified element with associated priority to the PriorityQueue<TPriority, TElement>, and immediately removes the minimal element, returning the result.

public TElement EnqueueDequeue(TPriority priority, TElement element)

Parameters

priority TPriority

The priority with which to associate the new element.

element TElement

The element to add to the PriorityQueue<TPriority, TElement>.

Returns

TElement

The minimal element removed after the enqueue operation.

Remarks

Implements an insert-then-extract heap operation that is generally more efficient than sequencing Enqueue and Dequeue operations: in the worst case scenario only one shift-down operation is required.

EnqueueRange(IEnumerable<(TPriority priority, TElement element)>)

Enqueues a sequence of element/priority pairs to the PriorityQueue<TPriority, TElement>.

public void EnqueueRange(IEnumerable<(TPriority priority, TElement element)> items)

Parameters

items IEnumerable<(TPriority, TElement)>

The pairs of elements and priorities to add to the queue.

Exceptions

ArgumentNullException

The specified items argument was null.

EnqueueRange(TPriority, IEnumerable<TElement>)

Enqueues a sequence of elements pairs to the PriorityQueue<TPriority, TElement>, all associated with the specified priority.

public void EnqueueRange(TPriority priority, IEnumerable<TElement> elements)

Parameters

priority TPriority

The priority to associate with the new elements.

elements IEnumerable<TElement>

The elements to add to the queue.

Exceptions

ArgumentNullException

The specified elements argument was null.

Peek()

Returns the minimal element from the PriorityQueue<TPriority, TElement> without removing it.

public (TPriority priority, TElement element) Peek()

Returns

(TPriority priority, TElement element)

The minimal element of the PriorityQueue<TPriority, TElement>.

Exceptions

InvalidOperationException

The PriorityQueue<TPriority, TElement> is empty.

TryDequeue(out TElement, out TPriority)

Removes the minimal element from the PriorityQueue<TPriority, TElement>, and copies it to the element parameter, and its associated priority to the priority parameter.

public bool TryDequeue(out TElement element, out TPriority priority)

Parameters

element TElement

The removed element.

priority TPriority

The priority associated with the removed element.

Returns

bool

true if the element is successfully removed; false if the PriorityQueue<TPriority, TElement> is empty.

TryPeek(out TElement, out TPriority)

Returns a value that indicates whether there is a minimal element in the PriorityQueue<TPriority, TElement>, and if one is present, copies it to the element parameter, and its associated priority to the priority parameter. The element is not removed from the PriorityQueue<TPriority, TElement>.

public bool TryPeek(out TElement element, out TPriority priority)

Parameters

element TElement

The minimal element in the queue.

priority TPriority

The priority associated with the minimal element.

Returns

bool

true if there is a minimal element; false if the PriorityQueue<TPriority, TElement> is empty.