我正在实施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
中定义的==运算符,对吗?
答案 0 :(得分:0)
bool operator == (MyClass const& myClass)
必须为const
bool operator == (MyClass const& myClass)const
Othervise std::equal_to
将无法使用它,因为它接受const引用
template <class T> struct equal_to : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const {return x==y;}
};