我正在尝试创建一个包含指向同一类的
std::unordered_set
指针的类,但我无法找到在声明该类之前准备哈希函数的方法。
struct hash
{
inline std::size_t operator()(Vertex const * & other);
};
struct Vertex
{
// ...
double x, y, z;
std::unordered_set<Vertex *, hash> touching;
};
inline std::size_t hash::operator()(Vertex * const & other) const
{
return ((hash<double>()(other->x))>>1)^
((hash<double>()(other->y)) )^
((hash<double>()(other->z))<<1);
}
std::hash
,在hash::operator()
中,如果是这样,请指定完整范围并包括<functional>
。然后都需要Vertex
类的前向声明,然后一切都好
#include <unordered_set>
#include <functional> // std::hash
struct Vertex; // forward declare the `Vertex`
struct hash
{
std::size_t operator()(Vertex* other) const;
};
struct Vertex
{
double x, y, z;
std::unordered_set<Vertex*, ::hash> touching;
};
std::size_t hash::operator()(Vertex* other) const
{
return ((std::hash<double>()(other->x)) >> 1) ^
((std::hash<double>()(other->y))) ^
((std::hash<double>()(other->z)) << 1);
}
另请注意,您不需要获取指针的
const
-ref(即 Vertex const*& other
),只需 按原始类型的值传递它。