将int-Tuples转换为int和back

时间:2013-11-15 14:56:23

标签: c++ tuples

我有以下问题:我有一个整数元组列表,我必须存储为整数(即​​(1,1) - > 1,(2,1) - > 2,(1,2) - > 3等)。我必须从整数值中获取元组值,因此无法使用丢失信息的哈希函数。有没有其他快速功能可以做到这一点,或者我必须自己做这个?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以将两个整数合并为一个__int64整数,方法是首先将它们转换/转换为__int64,然后将其中一个位移到32位并添加它们。

要解码,只需执行相反的操作 - 复制长整数,然后向左移动32个位置,并从原始整数中减去该值。

答案 1 :(得分:1)

这很简单:

__int64 v = ((__int64)first << 32) | ((__int64)second & 0xffffffffL)

int first = (int)((v >> 32) & 0xffffffffL)
int second = (int)(v & 0xffffffffL)

或(使用无符号存储类型):

uint64_t v = ((uint64_t)first << 32) | (uint64_t)second

int first = (int)(v >> 32)
int second = (int)(v & 0xffffffffL)