使用自定义比较器在 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

原文由 Steven Morad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

注意 - 您可能还想查看其他答案,尤其是带有 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;
}

原文由 awesoon 发布,翻译遵循 CC BY-SA 4.0 许可协议

借助 struct 我们也可以做到这一点。代码将如下所示。

 struct myCompare{
    bool operator()(Node &a, Node &b){
        // Your own custom logic to compare the two nodes and return a boolean value.
    }
}

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

原文由 ZAFIR AHMAD 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题