提升::hash_combine vs 简单异或
boost::hash_combine vs simple XOR'ing
使用 boost 库时,函数boost::hash_combine
的工作方式如下:
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
http://www.boost.org/doc/libs/1_46_1/doc/html/hash/reference.html#boost.hash_combine
这种方法与简单的异或相比有什么优势?
使用XOR-ing,甚至可以使用哈希函数将无序容器用作键,而这个容器则依赖于顺序。
有许多有序容器,例如列表。如果你使用XOR,那么你基本上会说[0, 1]
和[1, 0]
相同。显然不是这样。覆盖无序容器的方法比强加一个会为有序容器产生大量冲突的方法要容易得多。XOR还有很多其他令人讨厌的属性。例如,如果您有重复的元素,那么它们将相互抵消。
最后,哈希的想法是合理地确保你不会为多个元素获得相同的值。XOR 本身不适合该属性。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 使用简单类型列表实现的指数编译时间.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在BST的这个简单递归实现中消除警告
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- 一种在C++中读取TXT配置文件的简单方法
- VS Code 上的简单 GDB C++调试失败,并显示 NullReferenceException
- 类方法VS类静态函数VS简单函数-性能方面
- 为什么VS模拟rax,rax,0而不是简单的移动
- 提升::hash_combine vs 简单异或
- 是否有Visual c++编译器在线,以及如何在c++和vs简单代码之间转换
- C++:简单代码中的 STXXL 和 VS 运行时错误
- Nodejs vs C++ 简单数学的性能
- 使用VS 2013,我试图创建一个简单的c++程序,VARCHAR将不起作用