我的哈希键类型和功能有什么问题?

时间:2015-10-21 00:33:44

标签: c++ hash unordered-map

我正在尝试为一个类创建自己的哈希函数,该类本质上是无符号整数的包装器。我一直在尝试关注此帖子here:和此资源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

1 个答案:

答案 0 :(得分:3)

template <struct T>
class EntityHash;

可能不是你想要的。使用template <class T>template <typename T>

unordered_map的第三个模板参数必须是类型,而不是模板的名称。所以:

std::unordered_map<Entity, unsigned int, EntityHash<Entity>> map;