我有一个带有两个双重组件的向量类,精度高达第三个小数位,实例化为每秒十亿次。
我计算它们的长度大约一样多
现在我想将长度存储在内存中,我认为像HashMap /字典这样的东西是个好主意,但这意味着我需要一个密钥。所以我想:为什么不使用矢量组件。由于我不能有两把钥匙,我正在寻找一种方法将这两个数字放在一起(顺序显然没关系)并得到一个独特的结果。
我的朋友建议使用MD5,但我认为这可能是矫枉过正(我从未想过我会说MD5)。
答案 0 :(得分:2)
简单地连接两个值?所以使用128位密钥,前64位是第一个双倍,第二个64位是第二个双倍?
根据您使用的语言,您也可以使用Object / Struct / any作为键。
但是你的内存使用量会很大。
答案 1 :(得分:2)
正如你所说,md5感觉相当矫枉过正。有很多简单的哈希函数,例如XOR哈希对于低级别的东西很常见
unsigned xor_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0;
int i;
for ( i = 0; i < len; i++ )
h ^= p[i];
return h;
}
但是,如果性能很重要,那么您应该搜索一个对您的数据类型有效的校验和。没有好的答案。
有许多替代方案here,所有这些方案都很容易实现和测试。您还可以尝试校验和的长度,以查看校验和的长度会影响应用程序的其他部分(性能方面)。
答案 2 :(得分:1)
有点'蛮力',但如何连接字符串表示?如果强制数字为小数点后3位,则12.23和100.1将为12.230100.100
唯一的缺点是转换为字符串需要花费大量时间 - 我认为不仅仅是DThoughts建议连接双值。你可以测试一下。