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

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

Susan Sarandon
发布: 2024-10-26 07:48:30
原创
275 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板