C 如何實現優先佇列?

時間 2021-06-05 03:09:52

1樓:

原生的Priority Queue已經被merge了

API 描述如下,感覺上符合大部分的需求了,應該是不是執行緒安全的,需要注意

namespace System.Collections.Generic

{ public class PriorityQueue // NB does not implement IEnumerable or ICollectionlt;summary>Creates an empty PriorityQueue instancelt;/summary>public PriorityQueuelt;summary>Creates a PriorityQueue instance with specified initial capacity in its backing arraylt;/summary>public PriorityQueue(int initialCapacitylt;summary>Creates a PriorityQueue instance with specified priority comparerlt;/summary>public PriorityQueue(IComparer? comparerpublic PriorityQueue(int initialCapacity, IComparer? comparerlt;summary>Creates a PriorityQueue populated with the specified values and prioritieslt;/summary>public PriorityQueue(IEnumerable<(TElement Element, TPriority Priority)> valuespublic PriorityQueue(IEnumerable<(TElement Element, TPriority Priority)> values, IComparer?

comparerlt;summary>Gets the current element count in the queuelt;/summary>public int Count { getlt;summary>Gets the priority comparer of the queuelt;/summary>public IComparer Comparer { getlt;summary>Enqueues the element with specified prioritylt;/summary>public void Enqueue(TElement element, TPriority prioritylt;summary>Gets the element with minimal priority, if it existslt;/summary>lt;exception cref="InvalidOperationException">The queue is empty.public TElement Peeklt;summary>Dequeues the element with minimal priority, if it existslt;/summary>lt;exception cref="InvalidOperationException">The queue is empty.public TElement Dequeuelt;summary>Try-variants of Dequeue and Peek methodslt;/summary>public bool TryDequeue([MaybeNullWhen(false)] out TElement element, [MaybeNullWhen(false)] out TPriority prioritypublic bool TryPeek([MaybeNullWhen(false)] out TElement element, [MaybeNullWhen(false)] out TPriority prioritylt;summary>Combined enqueue/dequeue operation, generally more efficient than sequential Enqueue/Dequeue callslt;/summary>public TElement EnqueueDequeue(TElement element, TPriority prioritylt;summary>Enqueues a sequence of element/priority pairs to the queuelt;/summary>public void EnqueueRange(IEnumerable<(TElement Element, TPriority Priority)> valueslt;summary>Enqueues a sequence of elements with provided prioritylt;/summary>public void EnqueueRange(IEnumerable values, TPriority prioritylt;summary>Removes all objects from the PriorityQueuelt;/summary>public void Clearlt;summary>Ensures that the PriorityQueue can hold the specified capacity and resizes its underlying buffer if necessarylt;/summary>public void EnsureCapacity(int capacitylt;summary>Sets capacity to the actual number of elements in the queue, if that is less than 90 percent of current capacitylt;/summary>public void TrimExcesslt;summary>Gets a collection that enumerates the elements of the queuelt;/summary>public UnorderedItemsCollection UnorderedItems { getpublic class UnorderedItemsCollection :

IReadOnlyCollection<(TElement Element, TPriority Priority)>, ICollectionpublic struct Enumerator : IEnumerator<(TElement TElement, TPriority Priority)>, IEnumeratorpublic Enumerator GetEnumerator

2樓:ksg fk

優先佇列可以插入新元素,可以快速獲取所有值中的最值,用堆最合適以前用C#寫過優先佇列,可以參考下(

c 中的運算子優先順序是如何實現的?

42nd Mu00 乙個簡單的寫法是 假設一元運算子比所有的二元運算子優先順序都高,二元運算子優先順序固定則優先順序高的則一定是優先順序低的操作符的子項接下來可以令乙個函式接收層級負責生成每層優先順序對應的解析函式 可以是模板函式 這樣呼叫最低優先順序對應的解析函式,就可以獲得根節點只需要乙個函式和...

怎樣實現簡訊介面佇列化傳送?

ericyy 我目前的設計。覺得有問題的,給我說哈。資料庫一共四張表 簡訊資料表 簡訊狀態表 簡訊隊列表 伺服器日誌表 做到日誌檔案就好了,不需建表 邏輯如下 新增簡訊 簡訊資料表敏感詞違法則返回給提交者 檢查當前簡訊手機號碼未傳送的簡訊條目數量 以區段形式劃分,每段最多5條 排程簡訊進入侯發佇列 ...

c 裡如何實現static warning?

原子筆 template X struct example It just declares a function but does not define a variable define static warning x,str example x 0 1 30 str example 0 in...