在 C 中使用优先级队列时,尝试使用自定义比较器函数声明它们时可能会遇到错误。让我们探讨这些错误背后的原因,并找出使用自定义比较器声明优先级队列的正确方法。
正如您提到的,尝试声明优先级具有以下代码的队列会触发错误:
<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>
第一个错误(“Compare 不是类型名称”)的原因是 Compare 应该是一个类型,特别是重写运算符的类() 功能。要解决此问题,您需要创建一个名为 Compare 的类并在其中重载运算符()。
当 Compare` 函数未正确指定为类型。要解决此问题,请将声明修改为:
<code class="cpp">priority_queue<Node, vector<Node>, Compare::Compare> openSet;</code>
此处,Compare::Compare 显式指定 Compare 类中的运算符() 函数。
还有其他方法可以使用自定义比较器声明优先级队列:
使用 std::function:
<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet(Compare);</code>
使用 decltype 和 Lambda表达方式:
<code class="cpp">decltype(Compare) myComparator = Compare; priority_queue<Node, vector<Node>, decltype(Compare)> openSet(myComparator);</code>
以上是如何在 C 中使用自定义比较器正确声明优先级队列?的详细内容。更多信息请关注PHP中文网其他相关文章!