首頁 >後端開發 >C++ >如何在 C 中使用自訂比較器正確聲明優先權佇列以避免錯誤?

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

Susan Sarandon
Susan Sarandon原創
2024-10-26 07:48:30275瀏覽

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

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

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