将std::unordered_set
与实施operator==
和hash
的类一起使用是否有捷径?具体来说,有没有办法(1)避免创建一个独立的operator==(const Object& a, const Object& b)
函数,以及(2)避免定义整个类只是为了保持size_t operator()(const Object& o) const {return o.hash();}
当然,这些都不是问题,我只是好奇。
答案 0 :(得分:2)
operator==
被定义为成员函数已经被照顾。
如果用作键的类具有成员函数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();
}