生成唯一编号

时间:2010-11-10 10:31:09

标签: c++ c

我在C ++中有三个int32数据类型的变量。我想为int32中的三个C++数字组合生成唯一编号。例如,我有int iVal1int iVal2int iVal3。有没有算法可以做到这一点?

为了避免混淆,我会重新解释这个问题。基本上我想用三个整数生成一个唯一的数字,因为我想将这个数字存储为地图中的一个键以检索数据。

有什么建议吗?感谢。

5 个答案:

答案 0 :(得分:1)

将数字连接在一起,得到的数字是int的3倍(96位)

1号:0xDEADFACE;数字2:0xF00BA4; 3:42

结果:0xDEADFACE00F00BA40000002A


编辑:返回的示例用法将新数字组成一个字符串

#include <stdio.h>

/* writes a, b, c into dst
** dst must have enough space for the result */
char *concat3(char *dst, unsigned a, unsigned b, unsigned c) {
    sprintf(dst, "%08x%08x%08x", a, b, c);
    return dst;
}

/* usage */
int main(void) {
    char n3[25]; /* 25 = 3*8 for each integer + 1 for terminating null */
    concat3(n3, 0xDEADFACE, 0xF00BA4, 42);
    printf("result is 0x%s\n", n3);
    return 0;
}

样品运行

$ ./a.out
result is 0xdeadface00f00ba40000002a

答案 1 :(得分:1)

您可以使用良好的哈希函数。

答案 2 :(得分:0)

对于计算方法,您可以在此处查看:Linear congruential generator

从另外三个数字生成unqiue数字的另一种方法是加法(至少工作一次)。

int n = x1 + x2 + x3

现在n是一个新的唯一编号。

答案 3 :(得分:0)

#include <stdint.h>
#include <time.h>
#include <limits.h>

int main (int argc, char **argv) {
    uint32_t firstInt, secondInt, thirdInt;

    srandom(time(NULL)); /* seed RNG */

    firstInt = random(UINT32_MAX);
    secondInt = random(UINT32_MAX);
    thirdInt = random(UINT32_MAX);

    /* do something with unsigned ints */

    return 0;
}

gregor是正确的,你不会从三个(甚至两个)整数的代数组合中得到一个唯一值。但是从你的问题的措辞中很难知道你真正想要的是什么。如果您真的想要一个唯一的号码,请查看UUID

答案 4 :(得分:0)

我想我明白了。 Venkata有三个号码集。例如:42,35,127。对于这些的每个组合,他需要一个唯一的数字。例如:

int a[2] = {25, 63, 12};
int b[2] = {149, 28, 56};
GetNumber(a) != GetNumber(b)

和GetNumber(a)总是== GetNumber(a),所以没有随机生成器。