我想知道原始整数类型的计算哈希值(例如std :: map key)之间的速度是否存在差异,例如int64_t和pod类型,例如struct { int16_t v[4]; };
。那么int128_t与struct {int32_t v[4];}
呢?
我知道这将是特定于实现的,所以我的问题最终与gnu标准库有关。 感谢
我发现的链接非常有用 How can I use a custom type for keys in a boost::unordered_map?
答案 0 :(得分:8)
std::map
不是哈希表。它通常实现为平衡二叉树。你想要的是std::unordered_map
*。
对于std::unordered_map
,C ++只定义内部类型和常见类型的哈希值,例如std::string
。您需要自己为struct { int16_t v[4]; };
实现哈希函数。您可以在计算中将此结构转换为int64_t
,然后散列速度不会有任何差异。
(*:== std::tr1::unordered_map
== boost::unordered_map
≈__gnu_cxx::hash_map
== stdext::hash_map
等)
(**:20.8.16类模板hash
:... 整数类型(3.9.1),浮点类型(3.9.1),指针类型(8.3。 1),std::string
,std::u16string
,std::u32string
,std::wstring
,std::error_code
,std::thread::id
,std::bitset
和{{1 }} 的。)子>