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;
}