gpt4 book ai didi

c++ - 优先队列的语法

转载 作者:行者123 更新时间:2023-12-05 02:34:59 25 4
gpt4 key购买 nike

为什么我们需要 3 个参数来创建具有用户定义比较的优先级队列。

priority_queue<Node*, vector<Node*>, comp> pq;

为什么我们不能写类似 priority_queue<Node*, comp> pq; 的东西(删除了 vector )来创建我们自己的比较运算符。vector 的目的是什么?

还有元素是如何进行比较的,比较完之后如何入队。

这里是如何发生重载的。

最佳答案

如果您看到 std::priority_queue选择,你可以看到第二个和第三个模板参数默认在std中实现。

template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;

当你做 priority_queue<Node*, com>所以在这里 com是第二个参数,但在声明中它是第三个。所以要将它设置到第三个位置,我们还需要添加第二个参数,就像我们必须在函数参数列表右侧添加默认参数的函数一样。

这就是std::priority_queue被设计为std::vector用作默认容器,因此将它添加到第二个位置使我们可以灵活地使用我们自己的容器而不是 std::vector .由于它恰好在其他默认参数列表的中间,因此要设置最正确的默认参数,必须同时设置其出现的默认参数。这是语言要求。

如果你了解优先级队列,它使用heap它根据您提供的比较器以这样的顺序存储您的数据,以便(可以说)最大元素位于顶部,优先级队列,使用该比较器插入和提取数据。默认情况下是 std::less这需要您为 < 提供过载您尝试放入的类型的运算符 prirotiy_queue在你的情况下是Node .如果您想设置自己的优先级标准,您可以提供这样的重载。

关于c++ - 优先队列的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70649467/

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