2010-01-23 81 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