C++でカスタムコンパレータを使用してpriority_queueを宣言する 質問する

C++でカスタムコンパレータを使用してpriority_queueを宣言する 質問する

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?

ベストアンサー1

注 - 他の回答、特に 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;
}

おすすめ記事