|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
哈希模板和哈希算法实现 更多...
类 | |
| struct | hash< coroutine_handle< Promise > > |
| coroutine_handle的哈希特化 更多... | |
| struct | hash< Key, Dummy > |
| 哈希函数的主模板 更多... | |
| struct | hash< T * > |
| 指针类型的哈希特化 更多... | |
| struct | hash< T, enable_if_t< is_enum_v< T > > > |
| 枚举类型的哈希特化 更多... | |
| struct | murmur_hash |
| MurmurHash_x64的128位哈希结果容器 更多... | |
| struct | is_nothrow_hashable< Key, Dummy > |
| 判断类型是否可无异常哈希 更多... | |
| struct | is_hash< Func, Arg, Dummy > |
| 判断类型是否为有效的哈希函数 更多... | |
| struct | hash< T, enable_if_t< is_base_of< ihashable< T >, T >::value > > |
| ihashable的哈希特化 更多... | |
| struct | hash< shared_ptr< T > > |
| shared_ptr的哈希特化 更多... | |
| struct | hash< unique_ptr< T, Deleter > > |
| unique_ptr的哈希特化 更多... | |
函数 | |
| NEFORCE_CONSTEXPR14 size_t | FNV_hash (const byte_t *first, const size_t count) noexcept |
| FNV-1a哈希算法 | |
| template<typename T> | |
| NEFORCE_CONSTEXPR14 size_t | FNV_hash_integer (const T value) noexcept |
| 整数类型的FNV哈希 | |
| template<typename CharT> | |
| NEFORCE_CONSTEXPR14 size_t | FNV_hash_string (const CharT *str, const size_t len) noexcept |
| 字符串类型的FNV哈希 | |
| NEFORCE_CONSTEXPR14 size_t | DJB2_hash (const char *str, const size_t len) noexcept |
| DJB2哈希算法 | |
| murmur_hash NEFORCE_API | MurmurHash_x64 (const void *key, size_t len, uint32_t seed) noexcept |
| MurmurHash3_x64_128算法 | |
| uint32_t NEFORCE_API | MurmurHash_x32 (const void *key, size_t len, uint32_t seed) noexcept |
| MurmurHash3_x86_32算法 | |
变量 | |
| NEFORCE_INLINE17 constexpr size_t | FNV_OFFSET_BASIS |
| FNV哈希算法的偏移基础值 | |
| NEFORCE_INLINE17 constexpr size_t | FNV_PRIME = 16777619U |
| FNV哈希算法的质数乘数 | |
| template<typename Key> | |
| NEFORCE_INLINE17 constexpr bool | is_nothrow_hashable_v = is_nothrow_hashable<Key>::value |
| is_nothrow_hashable的便捷变量模板 | |
| template<typename Func, typename Arg> | |
| constexpr bool | is_hash_v = is_hash<Func, Arg>::value |
| is_hash的便捷变量模板 | |
哈希模板和哈希算法实现
本实现中的哈希算法参考以下标准规范与学术文献:
哈希算法规范参考:
非加密哈希算法文献:
哈希函数安全标准:
本文件提供以下三种非加密哈希算法:
| 算法 | 输出位数 | 特点 | 适用场景 |
|---|---|---|---|
| FNV-1a | 32/64 位 | 实现简单、雪崩效应好、碰撞率低 | 哈希表、编译时哈希 |
| DJB2 | 32/64 位 | 极简实现、速度快 | 简单字符串哈希 |
| MurmurHash3 | 32/128 位 | 速度快、分布均匀、可自定义种子 | 高性能哈希表、Bloom Filter |
根据 ISO/IEC 14882:2020 §16.4.4,C++ 标准库哈希函数应满足:
FNV-1a哈希算法
| first | 数据的起始字节指针 |
| count | 数据的字节数 |
FNV(Fowler-Noll-Vo)是一种非加密哈希算法,具有:
FNV_hash函数使用FNV-1a版本算法,先异或再乘法的顺序。
引用了 count().
被这些函数引用 thread::id::to_hash().
|
noexcept |
整数类型的FNV哈希
| T | 整数类型 |
| value | 要哈希的整数值 |
|
noexcept |
字符串类型的FNV哈希
| CharT | 字符类型 |
| str | 字符串指针 |
| len | 字符串长度 |
引用了 integral_constant< bool, Value >::value.
被这些函数引用 basic_string< char >::to_hash() , 以及 basic_string_view< typename Traits::char_type, Traits >::to_hash().
MurmurHash3_x86_32算法
| key | 要哈希的数据 |
| len | 数据长度 |
| seed | 哈希种子 |
MurmurHash3的32位版本,产生32位哈希值。 适用于32位系统或需要32位哈希的场景。
|
noexcept |
MurmurHash3_x64_128算法
| key | 要哈希的数据 |
| len | 数据长度 |
| seed | 哈希种子 |
MurmurHash是一种非加密哈希算法,具有:
MurmurHash_x64是MurmurHash3的64位版本,产生128位哈希值。
|
constexpr |