有关C++哈希函数的常用形式,具体解释见注释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #pragma once #include<unordered_set> #include<unordered_map> namespace hash_function { //计算对应的哈希码 template < typename T> inline void hash_combine( size_t & seed, const T& val) { seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2); } //函数递归的出口,即参数最终分解为一个 template < typename T> inline void hash_val( size_t & seed, const T& val) { hash_combine(seed, val); } //将参数进行分解 template < typename T, typename ... Types> inline void hash_val( size_t & seed, const T& val, const Types&...args) { hash_combine(seed, val); hash_val(seed, args...); return seed; } //将参数传入 template < typename ... Types> inline size_t hash_val( const Types&...args) { size_t seed = 0; hash_val(seed, args...); return seed; } } |
#pragma once#include<unordered_set>#include<unordered_map>namespace hash_function {//计算对应的哈希码template<typename T>inline void hash_combine(size_t& seed, const T& val) {seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);}//函数递归的出口,即参数最终分解为一个template<typename T>inline void hash_val(size_t& seed, const T& val) {hash_combine(seed, val);}//将参数进行分解template<typename T, typename... Types>inline void hash_val(size_t& seed, const T& val,const Types&...args) {hash_combine(seed, val);hash_val(seed, args...);return seed;}//将参数传入template<typename... Types>inline size_t hash_val(const Types&...args) {size_t seed = 0;hash_val(seed, args...);return seed;}
}
__EOF__
作 者:Mexcellent
出 处:https://www.cnblogs.com/Mexcellent/p/17638102.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人