Я планирую использовать свою собственную функцию сравнения с 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: ошибка: неверный тип в объявлении перед ‘;’ знак
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;
Хорошо. Вышеуказанный фрагмент работает. Похоже, здесь нужно использовать функтор.
Других решений пока нет …