EXTENDIBLE HASH INDEX
概述
-
第二个编程项目是为BusTub DBMS实现一个以磁盘为媒介的哈希表。
-
需要使用可扩展的散列哈希方案实现一个哈希表。
-
这个索引包括一个目录页,它包含指向桶状页的指针。该表将通过你的缓冲池从Project#1访问页面。该表包含一个目录页,它存储了该表和桶的所有元数据。你的哈希表需要支持满/空桶的桶分割/合并,以及全局深度必须改变时的目录扩展/收缩。
任务
技术坑点
这里先讲一下自己做实验2时所遇到的技术坑点,具体代码就不公开了,希望小伙伴萌避雷,
-
随着项目的逐渐变大,学会把握整个项目框架很重要,与之相关的头文件(.h)啥的不用多说了,其次是不相关的头文件,它里面包含了其他类的定义与一些宏定义,通过将它们include后,便可以将整个项目分为多个板块,便于开发与学习,为此把不相干的头文件也需要知晓将它引入的用处。
-
面对每个类定义的庞大的成员函数数量,要学会取其精华,简而言之就是要合理取用,需要的函数就实现,不需要的可以不管,删除也行(我就删了)
-
对于类中私有成员变量的定义一定要摸清楚每个的含义,千万在实现类的时候忘掉他们的作用与用途!!!(曾经的我就是忘掉了comparator_)
-
对于强制转换技术: reinterpret_cast 的窥探,说白了就是static_cast的升级版,能够重新从底层方面解释一个类,但是要保证两个类的大小相同,否则会出现问题
-
键和值都相同,插入才会错误,如果只是键相同也可以进行插入。
-
位操作要捡起来了。(假设有一个名为array的char类型的数组)
-
定位到目标位:
int numIndex = i / sizeof(char);
int bitIndex = i / sizeof(char);
通过这两个数就可以访问目标了。
-
获取第i个bit:
int s = (array[numIndex] >> bitIndex) & 1;
-
把第i个bit置为1:
array[numIndex] = array[numIndex]<
-