Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String qHash在计算机上是一致的吗?_String_Qt_Database Design_Hash_Primary Key - Fatal编程技术网

String qHash在计算机上是一致的吗?

String qHash在计算机上是一致的吗?,string,qt,database-design,hash,primary-key,String,Qt,Database Design,Hash,Primary Key,我有一个包含多个文本列的数据库表,这些文本列必须是唯一的,我不想使用多列键,所以我想将这些字符串散列到一个int中,并将其用作主键。考虑到数据库需要在不同的地方由不同的人编辑,我想知道是利用还是编写自己的函数更好。(另外,如果整个方法都不好,请提供帮助。)qHash的实现如下: static uint hash(const uchar *p, int n) { uint h = 0; uint g; while (n--) { h = (h <&l

我有一个包含多个文本列的数据库表,这些文本列必须是唯一的,我不想使用多列键,所以我想将这些字符串散列到一个int中,并将其用作主键。考虑到数据库需要在不同的地方由不同的人编辑,我想知道是利用还是编写自己的函数更好。(另外,如果整个方法都不好,请提供帮助。)

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;
}
静态uint散列(const uchar*p,int n)
{
uint h=0;
uint-g;
而(n--){
h=(h>23;
h&=~g;
}
返回h;
}
静态uint散列(常量QChar*p,整数n)
{
uint h=0;
uint-g;
而(n--){
h=(h>23;
h&=~g;
}
返回h;
}
代码中没有特定于平台的内容。但是哈希算法不能像数据库一样保证唯一性。它尽可能避免冲突,但不能保证唯一性。这就是大多数哈希容器使用桶和重新分配算法的原因