gpt4 book ai didi

c - 这是 Tokyo Cabinet 的错误吗?

转载 作者:行者123 更新时间:2023-11-30 14:27:33 26 4
gpt4 key购买 nike

它基本上是一个二叉树,它首先搜索哈希来决定它是还是:

if(hash > rec.hash){
off = rec.left;
entoff = rec.off + (sizeof(uint8_t) + sizeof(uint8_t));
} else if(hash < rec.hash){
off = rec.right;
entoff = rec.off + (sizeof(uint8_t) + sizeof(uint8_t)) +
(hdb->ba64 ? sizeof(uint64_t) : sizeof(uint32_t));
} else {
if(!rec.kbuf && !tchdbreadrecbody(hdb, &rec)) return false;
int kcmp = tcreckeycmp(kbuf, ksiz, rec.kbuf, rec.ksiz);
if(kcmp > 0){
off = rec.left;
...
} else if(kcmp < 0){
off = rec.right;
...

以下是哈希值的计算方式:

static uint64_t tchdbbidx(TCHDB *hdb, const char *kbuf, int ksiz, uint8_t *hp){
...
uint32_t hash = 751;
const char *rp = kbuf + ksiz;
while(ksiz--){
...
hash = (hash * 31) ^ *(uint8_t *)--rp;
}
*hp = hash;
...
}

但是hash的计算方式似乎并不能保证key的有序性,

这是一个错误吗?

最佳答案

它不会尝试按键本身的值对键进行排序。它首先按哈希对它们进行排序,然后在哈希冲突的情况下按键值对它们进行排序。

所以不,这不是一个错误。除非您可以引用文档说明这种类型的表按键值排序。

关于c - 这是 Tokyo Cabinet 的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7806360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com