【发布时间】:2013-05-23 11:10:38
【问题描述】:
我想知道对于hash map 坐标(在 2d 或 3d 中,即双精度向量)是否有一个通用的全方位解决方案?
示例here 演示了如何为pair<int,int> 创建自定义哈希映射,
但想出一张从pair<double,double>(可以表示二维坐标)到size_t的独特地图似乎并非易事。
我知道我可以通过提供比较器对象来使用有序映射,但对于我的应用程序来说,不需要对它们进行排序,而且哈希映射似乎更快。
但是,由于我是所有这些hash 东西的新手,我有点迷失了如何继续。
p/s/ 我使用 C++11。
【问题讨论】:
-
为什么不能在您提供的链接中使用相同的方法?使用
pair<double,double>而不是pair<int,int>似乎微不足道,而且由于您不需要订购,您仍然可以使用std::unordered_map。 -
@André 因为地图不是唯一的。
-
如果我没记错的话,
std::unordered_map中不能有多个相等键。但是,您可以将不同的键映射到相同的值。因此,密钥本身是独一无二的。你能更好地描述你的问题吗? -
坦率地说,我还没有遇到问题。我只是假设地图应该是唯一的,因此将
(double)*100+(double)映射到int不是唯一的。但也许没关系。正如我所说,我是散列东西的新手。 -
你是对的,散列应该是唯一的,你应该根据你的数据范围设计一种避免冲突的方法,或者使用一个好的散列方法。