Функция сравнения 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, поэтому любые советы будут оценены.