unordered_map的键

时间:2014-10-03 09:12:40

标签: c++ c++11 unordered-map

在C ++ 11中构造unordered_map时,键和值的数据类型有哪些限制?

我试图创造这个:

unordered_map<vector<int>, int>

这给了我一个编译错误。我需要写自己的哈希吗?

1 个答案:

答案 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 ==也必须可用于关键对象,或   比较指定为第四个模板参数。