首頁  >  文章  >  後端開發  >  如何在 C 中使用自訂比較器正確聲明優先權佇列?

如何在 C 中使用自訂比較器正確聲明優先權佇列?

Patricia Arquette
Patricia Arquette原創
2024-10-24 14:05:02394瀏覽

How to Correctly Declare a Priority Queue with a Custom Comparator in C  ?

使用自訂比較器在C 中宣告優先權佇列

在C 中使用優先權佇列時,嘗試使用自訂比較器函數宣告​​它們時可能會遇到錯誤。讓我們探討這些錯誤背後的原因,並找出使用自訂比較器聲明優先權佇列的正確方法。

錯誤聲明:原因和解決方案

正如您所提到的,嘗試聲明優先權具有以下程式碼的佇列會觸發錯誤:

<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>

第一個錯誤(“Compare 不是類型名稱”)的原因是Compare 應該是一個類型,特別是重寫運算符的類別() 功能。要解決此問題,您需要建立一個名為 Compare 的類別並在其中重載運算子()。

當 Compare` 函數未正確指定為型別。若要解決此問題,請將聲明修改為:

<code class="cpp">priority_queue<Node, vector<Node>, Compare::Compare> openSet;</code>

此處,Compare::Compare 明確指定 Compare 類別中的運算子() 函數。

替代聲明選項

還有其他方法可以使用自訂比較器宣告優先權佇列:

使用std::function:

<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet(Compare);</code>

使用decltype 和Lambda表達方式:

<code class="cpp">decltype(Compare) myComparator = Compare;
priority_queue<Node, vector<Node>, decltype(Compare)> openSet(myComparator);</code>

以上是如何在 C 中使用自訂比較器正確聲明優先權佇列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn