2010-01-23 84 views
1

我想在32位应用程序中生成任何有限的std :: string大小唯一标识(即大小6)。什么是最好的和快速的方法来做到这一点?生成std :: string的唯一标识

+4

什么样的id?数字?又有多独特?对于您的应用程序,会话,机器,世界? – 2010-01-23 10:47:53

+0

它可以有任何足够独特的ASCII字符,所以我不会再次获得相同的ID。它可以是从1到8的任何大小,用于我的应用程序。 – cpx 2010-01-23 10:57:25

+0

在这种情况下,明显的序列1,2,3有什么问题,.... – 2010-01-23 11:08:10

回答

7

查找字符串的散列,例如Jenkins hash function

但你永远不会得到独特的哈希值,因为字符串可以比你的尺寸6更长的时间,而Pigoenhole lemma显示平凡认为散列必须碰撞的结果。

1

很难从你的问题你问出来,但下面的顺序“1”,在生成的字符串,“2”,“3”:

#include <string> 
#include <sstream> 

std::string GetUniqueId() { 
    static int n = 1; 
    std::ostringstream os; 
    os << n++; 
    return os.str(); 
} 
+0

我将具有唯一ID的数据保存在文件中,如果我要使用1 .. 2 .. 3。序列那么我如何知道下次我加载文件时ID是否已经提供给某些数据? 我想如果我从每个可能有ID的唯一数据生成ID,会更好。 – cpx 2010-01-23 11:25:03

+2

你为什么没有在你原来的问题中说出来?你在这里得到的答案的质量与你问题的清晰度和细节成正比。 – 2010-01-23 11:30:22

+0

请注意,此方法不是线程安全的。至少“静态”变量需要被保护以防止并发访问。 – MKroehnert 2011-04-13 15:14:12