2011-08-17 78 views
0

我有一個包含多個文本列的數據庫表,它們的集合必須是唯一的,而且我不想使用多列鍵,所以我正在考慮將這些字符串散列到一個int中並將其用作主鍵。我想知道利用uint qHash (const QString & key)還是寫我自己的功能會更好一些,因爲數據庫需要由不同地方的不同人員編輯。 (另外,如果整個的做法是不好的,請大家幫忙。)跨計算機的qHash是否一致?

回答

1

qHash被如下實施:

static uint hash(const uchar *p, int n) 
{ 
    uint h = 0; 
    uint g; 

    while (n--) { 
     h = (h << 4) + *p++; 
     if ((g = (h & 0xf0000000)) != 0) 
      h ^= g >> 23; 
     h &= ~g; 
    } 
    return h; 
} 

static uint hash(const QChar *p, int n) 
{ 
    uint h = 0; 
    uint g; 

    while (n--) { 
     h = (h << 4) + (*p++).unicode(); 
     if ((g = (h & 0xf0000000)) != 0) 
      h ^= g >> 23; 
     h &= ~g; 
    } 
    return h; 
} 

沒有什麼特定於平臺的代碼。然而,散列算法並不能保證數據庫的唯一性。它盡力避免碰撞,但不能保證。這就是大多數哈希容器使用桶和重新分配算法的原因。

相關問題