c++ - 为什么 std::priority_queue 首先返回最大的元素但使用 std::less ?

标签 c++ priority-queue c++-standard-library

为什么 std::priority_queue 首先返回最大的元素(即是最大优先级队列),即使它使用 std::less作为比较类型?

当我想创建一个最小队列时,这让我特别困惑,这将由 std::priority_queue<T, std::vector<T>, std::greater<T>> 完成。 .

优先级队列的作用与 sort() 相反,使事情变得不那么一致。如果你sort()一个vector使用greater比较器,然后front() vector 的值就是你的最大值。如果您使用 greater 创建优先级队列那么前面就是最小值。我意识到优先级队列使用堆,但我觉得这是有充分理由的。

最佳答案

这样做是为了与历史实现保持一致:许多类,例如 std::map ,以及算法,例如 std::sort自标准模板库(后来成为 C++ 标准库)开始以来,就使用小于关系来实现排序功能。

在多个类和模板之间保持一致非常重要,因为库用户不需要记住哪个比较是哪个容器或算法的默认比较。

关于c++ - 为什么 std::priority_queue 首先返回最大的元素但使用 std::less ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750632/

相关文章:

c++ - 我刚刚制作的程序显然是病毒? C++

java - PriorityQueue 和三元运算符

c++ - 为什么从 C++11 中删除了 std::pow(double, int)?

c++ - 为什么std::abs()不能与 float 一起使用

c++ - 类型安全的字符串参数

c++ - 在 Qt Creator 中更改默认工作目录

c++ - 使用 CUDA 中的缩减查找数组中的最小值(但跳过一些元素)

haskell - 如何实现一个最优的、纯功能性的、双端优先级队列?

java - 有人可以向我解释间接堆/间接优先级队列的概念吗?

c++ - 那么我在哪里可以找到最好的在线 C++ 标准库引用资料?