在C ++ 11中构造unordered_map时,键和值的数据类型有哪些限制?
我试图创造这个:
unordered_map<vector<int>, int>
这给了我一个编译错误。我需要写自己的哈希吗?
答案 0 :(得分:2)
std::unordered_map
的密钥需要通过专门化std::hash
来实现哈希。
STL中定义的基本类型的标准专业是:
template<> struct hash<bool>;
template<> struct hash<char>;
template<> struct hash<signed char>;
template<> struct hash<unsigned char>;
template<> struct hash<char16_t>;
template<> struct hash<char32_t>;
template<> struct hash<wchar_t>;
template<> struct hash<short>;
template<> struct hash<unsigned short>;
template<> struct hash<int>;
template<> struct hash<unsigned int>;
template<> struct hash<long>;
template<> struct hash<long long>;
template<> struct hash<unsigned long>;
template<> struct hash<unsigned long long>;
template<> struct hash<float>;
template<> struct hash<double>;
template<> struct hash<long double>;
template< class T > struct hash<T*>;
对于其他一切你需要编写自己的哈希和/或使用boost::hash
。
此外,Tony D的评论说:
如果您将散列函数指定为第三个模板参数 喜欢。另外,operator ==也必须可用于关键对象,或 比较指定为第四个模板参数。