这是用C++编写的。我需要为每一对数字保留一个计数。这两个数字的类型是“int”。我排序这两个数字,所以(n1 n2)对与(n2 n1)对相同。我使用std :: unordered_map作为容器。我一直在用pairing function by Matthew Szudzik, Wolfram Research, Inc.。在我的实现中,函数给了我一个类型为“long”的唯一数字(在我的机器上是64位),用于每对“int”类型的两个数字。我用这个long作为unordered_map(std :: unordered_map)的关键字。有没有更好的方法来保持这些对的计数?我的意思是,更快,如果可能的话使用更少的内存。是否有更好的实现来保持唯一整数对的计数?
此外,我不需要所有的长。即使您可以假设这两个数字的范围可以达到32位的最大值,但我预计配对函数的最大可能值最多需要36位。如果没有别的,至少有没有办法将36位作为unordered_map的关键字? (某些其他数据类型)
我想过使用bitset,但我不确定std :: hash是否会为任何给定的36位位集生成一个唯一的键,这可以用作unordered_map的键。
我将不胜感激任何想法,建议等
每对长度为2的“std :: set”如何?这样的顺序并不重要。 – CoryKramer 2014-10-06 18:21:22
那么输入是无符号的? – IdeaHat 2014-10-06 18:24:40
好的,并使用set作为unordered_map的关键字? – learningToCode 2014-10-06 18:24:56