如何将三个整数组合成一个唯一标记,以使标记在C++中保持整数?

Vya*_*lav 1 c++ integer unique

我尝试使用Cantor和Szuszik配对函数,但是例如a = 200,b = 201 c = 202得到的P(a,b,c)= P(P(a,b),c)它已经非常大了不适合int的数字.

Car*_*rum 8

独特地组合[0:1000]范围内的三个数字是没有问题的(假设int您的系统是32位或更大,那就是):

int combine(int a, int b, int c)
{
    return (a << 20) | (b << 10) | c;
}
Run Code Online (Sandbox Code Playgroud)

稍后提取它们:

void unpack(int combined, int *a, int *b, int *c)
{
    *a = combined >> 20;
    *b = (combined >> 10) & 0x3ff;
    *c = combined & 0x3ff;
}
Run Code Online (Sandbox Code Playgroud)

这种包装是安全的,因为1000小于2 10,所以这些数字总是适合10位.