вопросы о unordered_multiset_of в boost bimap

Я реализую boost::bimap и я рассматриваю возможность использования unordered_multiset_of
но unordered_multiset_of необходимо передать хэш-функцию и оператор равенства к нему. И я не могу понять это правильно.

class MyClass
{
std::string s1;
std::string s2;
bool operator == (MyClass const& myClass)
{
return (s1 == myClass.s1 && s2 == myClass.s2);
}
};

namespace std
{
template<>
struct hash<MyClass>
{
std::size_t operator()(const MyClass& myClass) const
{
std::size_t Seed = 0;
boost::hash_combine(Seed, myClass.s1);
boost::hash_combine(Seed, myClass.s2);
return Seed;
}
}
}int main()
{
typedef boost::bimaps::bimap<boost::bimaps::unordered_multiset_of<client,std::hash<MyClass>, std::equal_to>, .......................................> MyBiMap;

MyBiMap MAP;
}

кажется, что моя хеш-функция и функция equal_to выдают ошибку.
как мне это исправить?
я верю std::equal_to() автоматически вызовет мой оператор ==, определенный в MyClass, право?

1

Решение

bool operator == (MyClass const& myClass)

Должно быть const bool operator == (MyClass const& myClass)const
Othervise std::equal_to не сможет его использовать, так как он принимает константные ссылки

template <class T> struct equal_to : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const {return x==y;}
};
0

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

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