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)>
- 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
- subtractAbsFunc<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
- subtractAbsFunc<TPriority, TPriority, TPriority>
- The function that calculates the absolute difference between two priorities. 
- comparerIComparer<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
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
- priorityTPriority
- The priority with which to associate the new element. 
- elementTElement
- 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
- priorityTPriority
- The priority with which to associate the new element. 
- elementTElement
- 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
- priorityTPriority
- The priority with which to associate the new element. 
- elementTElement
- 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
- itemsIEnumerable<(TPriority, TElement)>
- The pairs of elements and priorities to add to the queue. 
Exceptions
- ArgumentNullException
- The specified - itemsargument 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
- priorityTPriority
- The priority to associate with the new elements. 
- elementsIEnumerable<TElement>
- The elements to add to the queue. 
Exceptions
- ArgumentNullException
- The specified - elementsargument 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
- elementTElement
- The removed element. 
- priorityTPriority
- 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
- elementTElement
- The minimal element in the queue. 
- priorityTPriority
- The priority associated with the minimal element. 
Returns
- bool
- true if there is a minimal element; false if the PriorityQueue<TPriority, TElement> is empty.