【发布时间】:2020-12-31 04:06:06
【问题描述】:
例如,当我使用 std::priority_queue 作为最小堆时,我需要执行以下操作:
struct MyType{
...
int data;
};
auto greaterThanCmp = [](const MyType& a, const MyType& b){ return a > b; };
std::priority_queue<MyType, std::vector<MyType>, greaterThanCmp> minHeap;
我的问题是:如果委员会/实施者走这条路,那么为 Min Heap 提供 GreaterThanCmp 或小于比较器是否也有优势。
或者换句话说,为什么标准选择一个而不是另一个?
我已经尝试使用 lessThanCmp 来实现我的 MinHeap 类,只是为了它。我测试了我的代码,它运行良好。
非常感谢您提前回复!
【问题讨论】:
-
“为什么标准选择一个而不是另一个?”——因为他们不能同时选择两者?我想你真的想问他们为什么特别选择
std::less而不是std::greater?另外,您是单独查看priority_queue,还是在您的问题中包含其他订购的容器(如std::set)? -
comparator函数只是决定元素的顺序。greaterThan允许最小的元素首先出现,而lessThan允许最大的元素首先出现。标准选择std::less作为默认值。 -
我猜这没有什么特别的原因。可能只是大多数标准函数使用
less作为默认比较器,而较大的值“通常”具有更多priority。
标签: c++ stl std priority-queue