我的哈希键类型和函数有什么问题?
What's wrong with my hash key type and function?
我正在尝试为 class 编写自己的哈希函数,它本质上是无符号整数的包装器。我一直在尝试关注这个话题 here: and this resource here。为什么这不起作用?请参阅代码注释以了解错误。
struct Entity
{
unsigned int id;
bool operator==( const Entity &other ) const
{
return ( id == other.id );
}
};
template<struct T>
class EntityHash;
template<>
class EntityHash<Entity> // Error: Type name is not allowed
{
public:
std::size_t operator()( const Entity& entity ) const
{
size_t h1 = std::hash<unsigned int>()( entity.id );
return h1; // Also... do I need a << 1 at the end of this to bitshift even though I'm not combining?
}
};
// Elsewhere
std::unordered_map<Entity, unsigned int, EntityHash> map; // Error: Argument list for class template EntityHash is missing
template <struct T>
class EntityHash;
可能不是您想要的。使用 template <class T>
或 template <typename T>
.
unordered_map
的第三个模板参数必须是类型,而不是模板的名称。所以:
std::unordered_map<Entity, unsigned int, EntityHash<Entity>> map;
我正在尝试为 class 编写自己的哈希函数,它本质上是无符号整数的包装器。我一直在尝试关注这个话题 here: and this resource here。为什么这不起作用?请参阅代码注释以了解错误。
struct Entity
{
unsigned int id;
bool operator==( const Entity &other ) const
{
return ( id == other.id );
}
};
template<struct T>
class EntityHash;
template<>
class EntityHash<Entity> // Error: Type name is not allowed
{
public:
std::size_t operator()( const Entity& entity ) const
{
size_t h1 = std::hash<unsigned int>()( entity.id );
return h1; // Also... do I need a << 1 at the end of this to bitshift even though I'm not combining?
}
};
// Elsewhere
std::unordered_map<Entity, unsigned int, EntityHash> map; // Error: Argument list for class template EntityHash is missing
template <struct T>
class EntityHash;
可能不是您想要的。使用 template <class T>
或 template <typename T>
.
unordered_map
的第三个模板参数必须是类型,而不是模板的名称。所以:
std::unordered_map<Entity, unsigned int, EntityHash<Entity>> map;