ホームページ  >  記事  >  バックエンド開発  >  C でカスタム コンパレータを使用して優先キューを正しく宣言する方法

C でカスタム コンパレータを使用して優先キューを正しく宣言する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-24 14:05:02323ブラウズ

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 というクラスを作成し、その中で 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。