计算哈希值,整数类型与结构/类

时间:2010-03-13 19:12:44

标签: c++ performance hash primitive-types

我想知道原始整数类型的计算哈希值(例如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?

1 个答案:

答案 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::stringstd::u16stringstd::u32stringstd::wstringstd::error_codestd::thread::idstd::bitset和{{1 }} 的。)