有关boost bimap中unordered_multiset_of的问题

时间:2013-04-22 15:59:41

标签: c++ boost unordered-set bimap boost-unordered

我正在实施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 个答案:

答案 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;}
};