直接使用成员函数unordered_set

时间:2016-07-24 00:13:56

标签: c++ unordered-set

std::unordered_set与实施operator==hash的类一起使用是否有捷径?具体来说,有没有办法(1)避免创建一个独立的operator==(const Object& a, const Object& b)函数,以及(2)避免定义整个类只是为了保持size_t operator()(const Object& o) const {return o.hash();}

当然,这些都不是问题,我只是好奇。

1 个答案:

答案 0 :(得分:2)

  1. operator==被定义为成员函数已经被照顾。

  2. 如果用作键的类具有成员函数hash() const,那么我们可以做这样简单的事情:

  3. -

    #include <unordered_map>
    #include <string>
    
    struct myclass {
      std::size_t hash() const { return 0; }
      bool operator==(const myclass& r) const { return true; }
    };
    
    struct self_hash
    {
      template<class T>
      auto operator()(const T& r) const { return r.hash(); }
    };
    
    int main()
    {
    
      using mymap = std::unordered_map<myclass, std::string, self_hash>;
    
      auto m = mymap();
    }