首頁 > 後端開發 > C++ > 主體

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

Patricia Arquette
發布: 2024-10-24 14:05:02
原創
322 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!