【发布时间】:2014-09-10 05:58:16
【问题描述】:
我想用两个键——'x'和'y'来创建结构存储值。我想我会使用 std::map>。但我认为最好只使用一个 std::map 并将两个键组合成一个键(我将其称为“p”)。
所以我需要函数 p->(x,y) 和函数 (x,y)->p。 'x' 和 'y' 都是允许负值的整数类型。
我认为这应该是可能的,但我很惊讶我没有在互联网上找到大量关于它的文章。
我对如何做到这一点有一些想法,但一切似乎都太复杂了。能否请您给我一些建议,告诉我如何去做或阅读哪些主题来解决这个问题?
可能的映射示例(但我需要类似的数学形式):http://i.stack.imgur.com/UbVaM.png
感谢您的任何建议:-)
【问题讨论】:
-
(x, y)的范围是多少? -
X 和 Y 只是一些有符号整数类型。例如'int'。
-
为什么不使用一些网格(好像所有值都是正数且偏移量正确)?
-
嗯,对。我在考虑无限数量的值。但实际上,当只有有限数量的值时,我可以使用: p=sqrt(max_value(key_type))*x+y ; x=p%max_value(key_type)) ; y=floor(p/max_value(key_type)))
-
如果你真正想要的是一个数字对的哈希函数,那么 Joshua Bloch 的 Java 哈希码函数具有良好的血统stackoverflow.com/questions/18473071/… 它的优点是速度快,这正是你想要的哈希函数但这只是一种方式。