C での優先キューのカスタム コンパレーターの宣言
C で優先キューを操作する場合、カスタム コンパレーターを利用して定義することが不可欠です。要素に優先順位を付けるロジック。ただし、カスタム コンパレータを使用して優先キューを宣言すると、エラーが発生する場合があります。
このようなエラーの 1 つは、宣言でテンプレート引数の型名としてコンパレータ関数を使用しようとすると発生します。たとえば、比較関数 bool Compare(Node a, Node b) があり、優先キューを次のように宣言すると、「Compare」は型名ではありませんというエラーが発生します。このエラーは、Compare 関数名をタイプとして誤って使用したことが原因で発生します。コンパレータを指定する正しい方法は、コンパレータをインライン ラムダ関数内で囲むか、operator() をオーバーロードするクラスを作成することです。
<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>インライン ラムダ関数を使用した解決策を説明するには、宣言を次のように書き換えます。 :
または、次のようにコンパレータのクラスを作成し、operator() をオーバーロードすることもできます。
<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet([](Node a, Node b){ return a.compareTo(b); });</code>
コンパレータのクラス/関数が std::function を満たすことを確認してください< ;bool(ノード, ノード)>署名があれば、コードは正常にコンパイルされるはずです。このアプローチにより、カスタム コンパレーターを使用して優先キューが正しく宣言されるようになり、定義されたロジックに基づいて要素に効果的に優先順位を付けることができます。
以上がエラーを回避するために、C でカスタム コンパレータを使用して優先キューを正しく宣言する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。