如何创建一个接受比较器的类(对于Max Heap和Min Heap)?

时间:2012-01-11 03:39:17

标签: c++ comparator

为了更多地了解Heaps,我实现了自己的MaxHeap类。我测试了它,它工作正常。现在,我想创建一个MinHeap。两者之间唯一不同的是(MaxHeap和MinHeap)只是比较(即改变< to> =)。那么如何重新设计我的课程以双向工作呢?我想到的是在创建对象时传递比较函数。这是最好的方式吗?如果是这样,我该怎么做呢?我甚至不知道正确的关键字来搜索我正在寻找的东西。请解释这样一个类的设计,并指出一些教程。谢谢!

1 个答案:

答案 0 :(得分:4)

执行标准库并使比较器成为模板参数:

template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
    SWOComp compare;
public:
    explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
    // ...
};

然后,当您需要比较两个元素ab时,请使用compare(a, b)

要实例化普通的< - 有序类型,请说出MyHeap<int>。要使用反向排序,请说MyHeap<double, std::greater<double>>。等等。

不要担心额外的成员对象;对于空基类优化,这对于无状态比较器来说不会花费任何成本。