最近,我很好奇浮点数的哈希算法是如何工作的,所以我查看了源代码boost::hash_value.事实证明这很复杂.实际实现循环遍历基数中的每个数字并累积哈希值.与整数散列函数相比,它涉及更多.
我的问题是:为什么浮点哈希算法会更复杂?为什么不将浮点值的二进制表示形式哈希,就好像它是一个整数?
喜欢:
std::size_t hash_value(float f)
{
return hash_value(*(reinterpret_cast<int*>(&f)));
}
Run Code Online (Sandbox Code Playgroud)
我意识到float不能保证与int所有系统上的大小相同,但是可以使用一些模板元程序来处理这种事情,以推断出与其相同大小的整数类型float.那么引入一个专门针对浮点类型操作的完全不同的哈希函数有什么好处呢?
在我的代码中,我有一个std::unordered_set,我需要将数据移动到std::vector.我正在使用std::unordered_setwhile获取数据以确保在转换为a之前仅存储唯一值std::vector.我的问题是如何std::vector最有效地移动内容?std::unordered_set移动数据后我不需要.我目前有以下内容:
std::copy(set.begin(), set.end(), std::back_inserter(vector));
Run Code Online (Sandbox Code Playgroud)