首页  >  文章  >  后端开发  >  如何在 C 中使用自定义比较器正确声明优先级队列以避免错误?

如何在 C 中使用自定义比较器正确声明优先级队列以避免错误?

Susan Sarandon
Susan Sarandon原创
2024-10-26 07:48:30205浏览

How to Correctly Declare Priority Queue with Custom Comparator in C   to Avoid Errors?

在 C 中为优先级队列声明自定义比较器

在 C 中使用优先级队列时,必须利用自定义比较器来定义对元素进行优先级排序的逻辑。然而,使用自定义比较器声明优先级队列有时会产生错误。

当声明尝试使用比较器函数作为模板参数中的类型名称时,就会发生这样的错误。例如,如果您有一个比较器函数 bool Compare(Node a, Node b) 并且您将优先级队列声明为:

<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>

您将遇到错误“Compare”不是类型名称。此错误源于将 Compare 函数名称错误地用作类型。指定比较器的正确方法是将其包含在内联 lambda 函数中或创建一个重载运算符() 的类。

要使用内联 lambda 函数说明解决方案,您可以将声明重写为:

<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet([](Node a, Node b){ return a.compareTo(b); });</code>

或者,您可以为比较器创建一个类并重载运算符(),如下所示:

<code class="cpp">class Compare {
public:
    bool operator()(Node a, Node b){
        return a.compareTo(b);
    }
};

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

确保比较器类/函数满足 std::function< ;布尔(节点,节点)>签名,代码应该可以成功编译。这种方法可确保使用自定义比较器正确声明优先级队列,使您能够根据定义的逻辑有效地确定元素的优先级。

以上是如何在 C 中使用自定义比较器正确声明优先级队列以避免错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn