0
我有一個包含多個文本列的數據庫表,它們的集合必須是唯一的,而且我不想使用多列鍵,所以我正在考慮將這些字符串散列到一個int中並將其用作主鍵。我想知道利用uint qHash (const QString & key)還是寫我自己的功能會更好一些,因爲數據庫需要由不同地方的不同人員編輯。 (另外,如果整個的做法是不好的,請大家幫忙。)跨計算機的qHash是否一致?
我有一個包含多個文本列的數據庫表,它們的集合必須是唯一的,而且我不想使用多列鍵,所以我正在考慮將這些字符串散列到一個int中並將其用作主鍵。我想知道利用uint qHash (const QString & key)還是寫我自己的功能會更好一些,因爲數據庫需要由不同地方的不同人員編輯。 (另外,如果整個的做法是不好的,請大家幫忙。)跨計算機的qHash是否一致?
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;
}
沒有什麼特定於平臺的代碼。然而,散列算法並不能保證數據庫的唯一性。它盡力避免碰撞,但不能保證。這就是大多數哈希容器使用桶和重新分配算法的原因。