在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中文網其他相關文章!