我想为自定义类型创建一个哈希,我已经看到我必须编写类似
的内容template <>
struct hash<MyClass>
{
std::size_t operator()(const MyClass& key) const
{
return std::hash<int>()(key.getID());
}
};
代码有效,但我不明白为什么我必须写
std::hash<int>()(key.getID());
而不是
std::hash<int>(key.getID());
中间()
运算符的含义是什么?我正在使用Visual Studio 2013,我试图看到std::hash
源代码,但我还不够好好理解它......
答案 0 :(得分:9)
std::hash<int>
是一种类型。 std::hash<int>()
是该类型的对象。 std::hash<int>()(key.getID());
在该对象上调用operator()
。
如果对象不是临时的,可能更容易理解:
std::hash<int> x;
auto h = x(key.getID());