C で優先キューを操作する場合、カスタム コンパレータ関数を使用して優先キューを宣言しようとすると、エラーが発生する場合があります。これらのエラーの背後にある理由を調査し、カスタム コンパレーターを使用して優先度キューを宣言する正しい方法を見つけてみましょう。
前述したように、優先度を宣言しようとしています次のコードを含むキューはエラーをトリガーします:
<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>
最初のエラー (「Compare は型名ではありません」) の理由は、Compare が型、具体的には演算子をオーバーライドするクラスであると想定されているためです。 () 関数。これを解決するには、Compare というクラスを作成し、その中で Operator() をオーバーロードする必要があります。
2 番目のエラー ("expected a >'") は、Compare` 関数が a として正しく指定されていない場合に発生します。タイプ。これを修正するには、宣言を次のように変更します。
<code class="cpp">priority_queue<Node, vector<Node>, Compare::Compare> openSet;</code>
ここで、Compare::Compare は Compare クラス内で Operator() 関数を明示的に指定します。
カスタム コンパレータを使用して優先キューを宣言する別の方法もあります:
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 中国語 Web サイトの他の関連記事を参照してください。