首页 > 解决方案 > 在 unordered_map 中使用浮点数作为键的好方法

问题描述

在我的场景中,如果两个浮点数(比如doubles)的绝对差在一定范围内,则它们被认为是相等的。这意味着很容易将doubles 用作 a 的键std::map:我只需要定义一个自定义比较函数。但我不确定什么是好的方法std::unordered_map,除了比较函数之外,它还需要一个哈希函数。

我认为一般来说没有任何方法可以为两个 close doubles 生成相同的哈希值,因为这将允许我们以小步长不断增加其中一个,最终获得两个double具有相同哈希值的非常不同的 s。

也许有一种方法可以将浮点数“标准化”为一些“标准”值?例如,一种非常糟糕的方法(甚至并不总是有效)是使用最接近整数的散列。

如果std::unordered_map不是正确的选择,我很好奇对于以浮点数作为键的 O(1) 关联容器还有哪些其他选择。(请注意,出于性能原因,键必须是浮点数,而不是自定义的高精度十进制数。)

标签: c++

解决方案


推荐阅读