在C 中為優先權佇列宣告自訂比較器
C 中使用優先權佇列時,必須利用自訂佇列比較器來定義對元素進行優先排序的邏輯。然而,使用自訂比較器聲明優先權佇列有時會產生錯誤。
當聲明嘗試使用比較器函數作為模板參數中的類型名稱時,就會發生這樣的錯誤。例如,如果您有一個比較器函數 bool Compare(Node a, Node b) 並且您將優先權佇列宣告為:
<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>
您將遇到錯誤「Compare」不是型別名稱。此錯誤源自於將 Compare 函數名稱錯誤地用作類型。指定比較器的正確方法是將其包含在內聯 lambda 函數中或建立一個重載運算子() 的類別。
要使用內聯lambda 函數說明解決方案,您可以將聲明重寫為:
<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet([](Node a, Node b){ return a.compareTo(b); });</code>
或者,您可以為比較器建立一個類別並重載運算子() ,如下所示:
<code class="cpp">class Compare { public: bool operator()(Node a, Node b){ return a.compareTo(b); } }; priority_queue<Node, vector<Node>, Compare> openSet;</code>
確保比較器類別/函數滿足std::function< ;布林(節點,節點)>簽名,程式碼應該可以成功編譯。這種方法可確保使用自訂比較器正確聲明優先權佇列,使您能夠根據定義的邏輯有效地確定元素的優先權。
以上是如何在 C 中使用自訂比較器正確聲明優先權佇列以避免錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!