为了更多地了解Heaps,我实现了自己的MaxHeap类。我测试了它,它工作正常。现在,我想创建一个MinHeap。两者之间唯一不同的是(MaxHeap和MinHeap)只是比较(即改变< to> =)。那么如何重新设计我的课程以双向工作呢?我想到的是在创建对象时传递比较函数。这是最好的方式吗?如果是这样,我该怎么做呢?我甚至不知道正确的关键字来搜索我正在寻找的东西。请解释这样一个类的设计,并指出一些教程。谢谢!
答案 0 :(得分:4)
执行标准库并使比较器成为模板参数:
template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
SWOComp compare;
public:
explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
// ...
};
然后,当您需要比较两个元素a
和b
时,请使用compare(a, b)
。
要实例化普通的<
- 有序类型,请说出MyHeap<int>
。要使用反向排序,请说MyHeap<double, std::greater<double>>
。等等。
不要担心额外的成员对象;对于空基类优化,这对于无状态比较器来说不会花费任何成本。