Хочу написать шаблон класса AVL_tree но столкнулся с проблемой: а как передать критерий сравения? Всмысле как написать конструктор для класса, который бы принял функтор, вроде:
struct foo {
bool operator()(int a, int b) {return a > b};
}
...
AVL_tree<int> a(foo);
...
или
AVL_tree<int, foo> a;
Пример передачи компаратора через шаблонный параметр:
#include <functional>
template <class T,
class Compare = std::less<T> >
class AVL_tree {
...
// необходимый код для АВЛ дерева
//-----
// пример использования компаратора
bool compare(T const & a, T const & b) const {
return Compare{}(a, b);
}
};
struct foo {
bool operator()(int a, int b) {
return a >= b;
}
};
int main() {
AVL_tree<int, foo> tree;
}
Использование указателя на функцию не подойдёт?
#include <iostream>
using namespace std;
class Foo{
private:
bool (*cmp)(int a, int b); //компаратор
public:
Foo(bool (*cmp)(int a, int b) = nullptr):cmp(cmp){//передача в конструкторе
}
void call(){ // вызов компаратора
if(cmp != nullptr){
cmp(1, 2);
}
}
};
bool first (int a, int b){//первый компаратор
cout << "\nFirst!";
return true;
}
bool second (int a, int b){//второй компаратор
cout << "\nSecond!";
return false;
}
int main() {
Foo f_foo(first), s_foo(second);
f_foo.call();
s_foo.call();
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу простой UDP сервер под Windows, который принимает сообщения от клиентовПо заданию сокеты должны работать в неблокирующем режиме и обязательно...
Мне нужно сделать проект под линукс на плюсах, не когда ранее не программировал под негоСейчас вот поставил Visual Studio Code на Ubuntu установил все...
В своем оконном приложении на WINAPI решил использовать вертикальный скролл(Естественно, прописав в аргументах окна)Сам скролл появился, однако...