|
NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
|
哈希模板和哈希算法实现 更多...
类 | |
| struct | neforce::hash< coroutine_handle< Promise > > |
| coroutine_handle的哈希特化 更多... | |
| struct | neforce::hash< Key, Dummy > |
| 哈希函数的主模板 更多... | |
| struct | neforce::hash< T * > |
| 指针类型的哈希特化 更多... | |
| struct | neforce::hash< T, enable_if_t< is_enum_v< T > > > |
| 枚举类型的哈希特化 更多... | |
| struct | neforce::murmur_hash |
| MurmurHash_x64的128位哈希结果容器 更多... | |
| struct | neforce::is_nothrow_hashable< Key, Dummy > |
| 判断类型是否可无异常哈希 更多... | |
| struct | neforce::is_hash< Func, Arg, Dummy > |
| 判断类型是否为有效的哈希函数 更多... | |
| struct | neforce::hash< T, enable_if_t< is_base_of< ihashable< T >, T >::value > > |
| ihashable的哈希特化 更多... | |
| struct | neforce::hash< shared_ptr< T > > |
| shared_ptr的哈希特化 更多... | |
| struct | neforce::hash< unique_ptr< T, Deleter > > |
| unique_ptr的哈希特化 更多... | |
函数 | |
| constexpr size_t | neforce::FNV_hash (const byte_t *first, const size_t count) noexcept |
| FNV-1a哈希算法 | |
| template<typename T> | |
| constexpr size_t | neforce::FNV_hash_integer (const T value) noexcept |
| 整数类型的FNV哈希 | |
| template<typename CharT> | |
| constexpr size_t | neforce::FNV_hash_string (const CharT *str, const size_t len) noexcept |
| 字符串类型的FNV哈希 | |
| constexpr size_t | neforce::low_level_hash (size_t x) noexcept |
| 快速位混合哈希函数 | |
| constexpr size_t | neforce::DJB2_hash (const char *str, const size_t len) noexcept |
| DJB2哈希算法 | |
| murmur_hash | neforce::murmur_hash64 (const void *key, size_t len, uint32_t seed) noexcept |
| MurmurHash3_x64_128算法 | |
| uint32_t | neforce::murmur_hash32 (const void *key, size_t len, uint32_t seed) noexcept |
| MurmurHash3_x86_32算法 | |
| constexpr uint32_t | neforce::XXH32 (const void *input, size_t len, uint32_t seed=0) noexcept |
| XXH32 哈希算法 | |
| constexpr uint64_t | neforce::XXH64 (const void *input, size_t len, uint64_t seed=0) noexcept |
| XXH64 哈希算法 | |
| uint64_t | neforce::wyhash (const void *key, size_t len, uint64_t seed) noexcept |
| wyhash 哈希算法 | |
| size_t | neforce::city_hash64 (const void *key, size_t len) noexcept |
| CityHash64 哈希算法 | |
| uint64_t | neforce::XXH3_64 (const void *data, size_t len) noexcept |
| XXH3_64bits 哈希算法 | |
变量 | |
| constexpr size_t | neforce::constants::FNV_OFFSET_BASIS |
| FNV哈希算法的偏移基础值 | |
| constexpr size_t | neforce::constants::FNV_PRIME = 1099511628211ULL |
| FNV哈希算法的质数乘数 | |
| template<typename Key> | |
| constexpr bool | neforce::is_nothrow_hashable_v = is_nothrow_hashable<Key>::value |
| is_nothrow_hashable的便捷变量模板 | |
| template<typename Func, typename Arg> | |
| constexpr bool | neforce::is_hash_v = is_hash<Func, Arg>::value |
| is_hash的便捷变量模板 | |
哈希模板和哈希算法实现
本实现中的哈希算法参考以下标准规范与学术文献:
哈希算法规范参考:
非加密哈希算法文献:
哈希函数安全标准:
| 算法 | 输出位数 | 特点 | 适用场景 |
|---|---|---|---|
| FNV-1a | 32/64 位 | 实现简单、雪崩效应好、碰撞率低 | 哈希表、编译时哈希 |
| DJB2 | 32/64 位 | 极简实现、速度快 | 简单字符串哈希 |
| MurmurHash3 | 32/128 位 | 速度快、分布均匀、可自定义种子 | 高性能哈希表、Bloom Filter |
| XXH32 | 32 位 | 极速、适合短数据 | 32 位哈希表、嵌入式系统 |
| XXH64 | 64 位 | 极速、适合中等长度数据 | 64 位哈希表、数据校验 |
| XXH3 | 64 位 | XXH 系列最快、大数据量优化、SIMD 加速 | 大数据哈希、流式处理 |
| wyhash | 64 位 | SMHasher 全通、现代设计、128 位乘法 | 通用哈希表、键值存储 |
| CityHash64 | 64 位 | 字符串哈希优化、多级分治 | 字符串哈希、缓存键 |
| low_level_hash | size_t | 单值位混合、零值安全 | 基本类型 hash 特化的内部基础 |
| hash_combine | size_t | 组合多个哈希值 | 自定义结构体哈希 |
根据 ISO/IEC 14882:2020 §16.4.4,C++ 标准库哈希函数应满足:
CityHash64 哈希算法
| key | 输入数据指针 |
| len | 数据长度 |
Google CityHash 是一种非加密哈希算法,专为字符串哈希优化。 适用于哈希表、字符串匹配等场景。
引用了 city_hash64().
被这些函数引用 city_hash64().
DJB2哈希算法
| str | 字符串指针 |
| len | 字符串长度 |
DJB2是一种非加密哈希算法,具有以下特点:
但在某些特殊情况下仍可能出现哈希冲突。
引用了 DJB2_hash().
被这些函数引用 DJB2_hash().
FNV-1a哈希算法
| first | 数据的起始字节指针 |
| count | 数据的字节数 |
FNV(Fowler-Noll-Vo)是一种非加密哈希算法,具有:
FNV_hash函数使用FNV-1a版本算法,先异或再乘法的顺序。
引用了 count(), FNV_hash(), neforce::constants::FNV_OFFSET_BASIS , 以及 neforce::constants::FNV_PRIME.
被这些函数引用 FNV_hash(), neforce::thread::id::to_hash() , 以及 neforce::uuid::v7().
|
constexprnoexcept |
整数类型的FNV哈希
| T | 整数类型 |
| value | 要哈希的整数值 |
引用了 FNV_hash_integer(), neforce::constants::FNV_OFFSET_BASIS, neforce::constants::FNV_PRIME , 以及 neforce::integral_constant< bool, Value >::value.
被这些函数引用 FNV_hash_integer().
|
constexprnoexcept |
字符串类型的FNV哈希
| CharT | 字符类型 |
| str | 字符串指针 |
| len | 字符串长度 |
引用了 FNV_hash_string(), neforce::constants::FNV_OFFSET_BASIS, neforce::constants::FNV_PRIME , 以及 neforce::integral_constant< bool, Value >::value.
被这些函数引用 FNV_hash_string() , 以及 neforce::reflect::type_id_for().
快速位混合哈希函数
| x | 输入值 |
将一个 size_t 值通过位混合操作扩散到整个输出空间。
引用了 low_level_hash().
被这些函数引用 low_level_hash().
MurmurHash3_x86_32算法
| key | 要哈希的数据 |
| len | 数据长度 |
| seed | 哈希种子 |
MurmurHash3的32位版本,产生32位哈希值。 适用于32位系统或需要32位哈希的场景。
引用了 murmur_hash32().
被这些函数引用 murmur_hash32().
|
noexcept |
MurmurHash3_x64_128算法
| key | 要哈希的数据 |
| len | 数据长度 |
| seed | 哈希种子 |
MurmurHash是一种非加密哈希算法,具有:
MurmurHash_x64是MurmurHash3的64位版本,产生128位哈希值。
引用了 murmur_hash64().
被这些函数引用 murmur_hash64().
XXH32 哈希算法
| input | 输入数据指针 |
| len | 数据长度 |
| seed | 种子值,默认为 0 |
xxHash 是一种极速非加密哈希算法,XXH32 是其 32 位版本。 适用于哈希表、数据校验等非安全场景。
引用了 end(), neforce::endian::read_le32(), rotate_l32() , 以及 XXH32().
被这些函数引用 neforce::basic_string< char >::to_hash(), neforce::basic_string_view< typename Traits::char_type, Traits >::to_hash() , 以及 XXH32().
XXH64 哈希算法
| input | 输入数据指针 |
| len | 数据长度 |
| seed | 种子值,默认为 0 |
xxHash 的 64 位版本,适合中等到大型数据的哈希。 在 64 位平台上速度极快。
引用了 end(), neforce::endian::read_le32(), neforce::endian::read_le64(), rotate_l64() , 以及 XXH64().
被这些函数引用 neforce::basic_string< char >::to_hash(), neforce::basic_string_view< typename Traits::char_type, Traits >::to_hash() , 以及 XXH64().
|
inlineconstexpr |
FNV哈希算法的偏移基础值
被这些函数引用 neforce::FNV_hash(), neforce::FNV_hash_integer(), neforce::FNV_hash_string(), neforce::none_t::to_hash(), neforce::optional< T >::to_hash(), neforce::optional< T & >::to_hash() , 以及 neforce::tuple<>::to_hash().
|
inlineconstexpr |
FNV哈希算法的质数乘数
被这些函数引用 neforce::FNV_hash(), neforce::FNV_hash_integer() , 以及 neforce::FNV_hash_string().