Функция сравнения C++ не принимает 2 аргумента

Я пытаюсь реализовать общую кучу в 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: "сравнить": функция не принимает 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);
    }
}

Я уверен, что плохо справлялся с использованием функции сравнения, но я изо всех сил пытаюсь найти четкое объяснение того, почему это неправильно из моего поиска в Google, поэтому любые советы будут оценены.

0 ответов

Другие вопросы по тегам