увеличить BIMAP set_of с пользовательским компаратором

Я планирую использовать свою собственную функцию сравнения с boost bimap. Проблема, которую я пытаюсь решить, заключается в том, что при использовании boost bimap с указателем сравнение не должно сравнивать два указателя, а должно сравнивать класс, на который указывает указатель.

Я попробовал следующий код. Но это даже не компилируется. Что я делаю неправильно? Также есть более простой способ добиться меньшего количества функций, который сравнивает два объекта, а не два указателя указателей)

typedef std::set<int> ruleset;

template <class myclass>
bool comp_pointer(const myclass &lhs, const myclass &rhs)
{
return ((*lhs) < (*rhs));
}

typedef boost::bimap<set_of<ruleset *, comp_pointer<ruleset *> >, int> megarulebimap;

Сообщения об ошибках:

party1.cpp: 104: 64: ошибка: несоответствие типа / значения в аргументе 2 в списке параметров шаблона для ‘template struct boost :: bimaps :: set_of’
party1.cpp: 104: 64: ошибка: ожидал тип, получил ‘comp_pointer’
party1.cpp: 104: 70: ошибка: неверный аргумент шаблона 1
party1.cpp: 104: 85: ошибка: неверный тип в объявлении перед ‘;’ знак

0

Решение

typedef std::set<int> ruleset;

struct ruleset_cmp {
bool operator()(const ruleset *lhs, const ruleset *rhs) const
{
return ((*lhs) < (*rhs));
}
};

typedef boost::bimap<set_of<ruleset *, ruleset_cmp>, int> megarulebimap;

Хорошо. Вышеуказанный фрагмент работает. Похоже, здесь нужно использовать функтор.

2

Другие решения

Других решений пока нет …