直接将成员函数与unordered_set一起使用

Use member functions directly with unordered_set

本文关键字:set 一起 unordered 成员 函数      更新时间:2023-10-16

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. 被定义为成员函数的CCD_ 6已经得到满足。

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

-

#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();
}