【问题标题】:Is qHash consistent across computers?qHash 在计算机之间是否一致?
【发布时间】:2011-08-18 14:51:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 2014-05-08
      • 1970-01-01
      • 2022-08-15
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多