ホームページ  >  記事  >  バックエンド開発  >  C でカスタム コンパレータを使用して優先キューを宣言するにはどうすればよいですか?

C でカスタム コンパレータを使用して優先キューを宣言するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-25 05:28:02597ブラウズ

How to Declare a Priority Queue with Custom Comparators in C  ?

カスタム コンパレータを使用した C での優先度キューの宣言

C でカスタム コンパレータを使用する場合、優先度キューを宣言すると課題が生じる可能性があります。特定の問題を詳しく調べて、正しいアプローチを検討してみましょう。

提供されたコード スニペットで述べたように、Node クラスの外部に存在する bool Compare(Node a, Node b) を比較関数として使用しています。この問題を修正するには、次の点を考慮してください:

  1. 比較クラスを定義する: 関数ポインターを使用する代わりに、オーバーロードされた Operator() を使用してクラスを定義できます。実装。例:

    <code class="cpp">class Compare {
    public:
        bool operator()(const Node& a, const Node& b) {
            // Your comparison logic here
        }
    };</code>
  2. 優先キューの宣言: Compare クラスを定義したら、次の構文を使用して優先キューを宣言します:

    <code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>

制限によりカスタム クラスを定義できない場合は、 std::function を使用することもできます。コンパレータタイプとして。ただし、最初のアプローチほど効率的ではない可能性があります。

<code class="cpp">bool Compare(const Node& a, const Node& b) {
    // Your comparison logic here
}

int main() {
    std::priority_queue<Node, vector<Node>, std::function<bool(const Node&, const Node&)>> openSet(Compare);
    return 0;
}</code>

これらのアプローチのいずれかに従うことで、C のカスタム コンパレータを使用して優先キューを効果的に宣言できます。

以上がC でカスタム コンパレータを使用して優先キューを宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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