C ++比较器函数不带2个参数

时间:2018-01-05 20:52:54

标签: c++ visual-studio heap comparator

我正在尝试在C ++中实现通用堆。为了使它尽可能通用,我试图让堆使用比较器来允许不同类型的堆排序。但是我之前从未使用过比较器,而且我遇到了一个问题。这是我的堆的设置。

template <typename T>
class greater {
public:
    bool operator()(const T& a, const T& b) const { return a > b; }
};

template <typename T, typename C = greater<T> >
class heap {
public:
    //constructors
    heap();
    heap(const heap& other);
    heap& operator= (const heap& other);

    //destructor
    ~heap();

    //operations
    void push(const T& datum);
    T& peek() const;
    void pop();

    //status
    bool empty() const { return tree.empty(); }
    int size() const { return tree.size(); }

    //debug
    void print() const;

private:
    std::vector<T> tree;

    //auxilliary functions
    int parent(int index) { return (index - 1) / 2; }
    int left(int index) { return 2 * index; }
    int right(int index) { return 2 * index + 1; }

    void swap(int a, int b) {
        T temp = tree[a];
        tree[a] = tree[b];
        tree[b] = temp;
    }

    void bubble_up(int index);
    void bubble_down(int index);
};

但是对于我的bubble_up方法的实现,我得到以下Visual Studio错误:'compare':函数不带2个参数错误代码:C2660 该错误引用了实现中while循环的行,如下所示。

template <typename T, typename C>
void heap<T, C>::bubble_up(int index) {
    C compare;
    int parent_index = parent(index);
    while (compare(tree[parent_index], tree[index]) && parent_index >= 0) {
        swap(parent_index, index);
        index = parent_index;
        parent_index = parent(index);
    }
}

我确信我使用比较功能处理得​​很差,但我很难找到一个明确的解释,为什么这是我的谷歌搜索错误所以任何建议将不胜感激。

0 个答案:

没有答案