gpt4 book ai didi

c++ - 使用自定义比较器在 C++ 中声明 priority_queue

转载 作者:IT老高 更新时间:2023-10-28 13:23:36 25 4
gpt4 key购买 nike

我正在尝试声明 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;
}

关于c++ - 使用自定义比较器在 C++ 中声明 priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com