qHash是否在计算机上保持一致?

时间:2011-08-17 23:54:20

标签: string qt database-design hash primary-key

我有一个包含多个文本列的数据库表,这些列必须是唯一的,我不想使用多列键,所以我想将字符串一起散列为一个int并将其用作主键。我想知道利用uint qHash ( const QString & key )或编写自己的函数是否更好,因为数据库需要由不同地方的不同人编辑。 (另外,如果整个方法都不好,请帮忙。)

1 个答案:

答案 0 :(得分: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;
}

该代码中没有特定于平台的内容。但是,哈希算法不保证像数据库那样的唯一性。它尽力避免碰撞,但不能保证。这就是为什么大多数哈希容器都使用存储桶和重新分配算法。