1. ホーム
  2. c++

[解決済み] c++でpriority_queueとcustom comparatorを宣言する

2022-03-07 14:55:59

質問

を宣言しようとしています。 priority_queue of nodes を使用しています。 bool Compare(Node a, Node b) をコンパレータ関数(これはノードクラスの外にある)として使うことができます。

現在、私が持っているのは

priority_queue<Node, vector<Node>, Compare> openSet;

なぜか Error: "Compare" is not a type name

という宣言に変更します。 priority_queue <Node, vector<Node>, bool Compare>

Error: expected a '>'

も試しました。

priority_queue<Node, vector<Node>, Compare()> openSet;
priority_queue<Node, vector<Node>, bool Compare()> openSet;
priority_queue<Node, vector<Node>, Compare<Node, Node>> openSet; 

を正しく宣言するにはどうしたらよいでしょうか。 priority_queue ?

解決方法は?

注 - 他の回答、特にdecltypeとlambdaに関する回答もチェックしてみてください。


クラスを宣言する必要があります。 Compare をオーバーロードし operator() を使うと、このようになります。

class Foo
{

};

class Compare
{
public:
    bool operator() (Foo, Foo)
    {
        return true;
    }
};

int main()
{
    std::priority_queue<Foo, std::vector<Foo>, Compare> pq;
    return 0;
}

また、何らかの事情でクラスとして作れない場合は std::function を使用します。

class Foo
{

};

bool Compare(Foo, Foo)
{
    return true;
}

int main()
{
    std::priority_queue<Foo, std::vector<Foo>, std::function<bool(Foo, Foo)>> pq(Compare);
    return 0;
}