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

Any*_*orn 2 c++ hash performance primitive-types

我想知道原始整数类型的计算哈希值(例如std :: map key)之间的速度是否存在差异,例如int64_t和pod类型struct { int16_t v[4]; };.那么int128_t与struct {int32_t v[4];}

我知道这将是特定于实现的,所以我的问题最终与gnu标准库有关.谢谢

我发现的链接非常有用 如何在boost :: unordered_map中使用自定义类型的键?

ken*_*ytm 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 等)

(**:16年8月20日类模板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,和std::vector<bool>.)