String qHash在计算机上是一致的吗?
我有一个包含多个文本列的数据库表,这些文本列必须是唯一的,我不想使用多列键,所以我想将这些字符串散列到一个int中,并将其用作主键。考虑到数据库需要在不同的地方由不同的人编辑,我想知道是利用还是编写自己的函数更好。(另外,如果整个方法都不好,请提供帮助。)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
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;
}
代码中没有特定于平台的内容。但是哈希算法不能像数据库一样保证唯一性。它尽可能避免冲突,但不能保证唯一性。这就是大多数哈希容器使用桶和重新分配算法的原因