C++ unordered_map 自定义key
flyfish
调试环境 VC++2017
自定义key主要是自定义类型的std::hash 的偏特化(specialization)
返回数据类型T哈希值
C++11为所有基本类型都提供了specialization实现
例如
std::hash::string>
std::hash::wstring>
假设使用基本类似
std::unordered_map map;
因为C++已经提供了基本类型key的hash 所以直接声明就可以使用
如果是我们自定义的类,就需要提供std::hash specialization的实现
头文件与实现文件分开的写法
头文件
#pragma once
class Node;
namespace std
{template <> struct hash {int operator()(const Node&) const;};
}
class Node
{
public:friend struct std::hash;
public:int a;int b;
};
实现文件
namespace std
{int hash::operator()(const Node& v) const {return std::hash<int>{}(v.a);}
}
放置一个文件的写法
#pragma once
class Node
{
public:friend struct std::hash;
public:int a;int b;
};
namespace std
{template <>struct std::hash{int operator()(const Node& v) const{return std::hash<int>{}(v.a);}};
}