可扩展哈希 - 析构函数C++

extendible hashing - destructor C++

本文关键字:C++ 析构函数 哈希 可扩展      更新时间:2023-10-16

所以...我已经实现了一个版本的可无限哈希...我现在的问题是析构函数。

我在 Hash 类中使用了一个指针数组,这些指针指向类 Bucket 中的存储桶。问题是同一存储桶上可能有多个指针。

在 Hash 类的析构函数中,我必须删除每个存储桶,然后删除数组,但我必须小心不要删除同一个存储桶两次(我认为这会导致错误)。为了做到这一点,我使用了一个布尔向量来记住桶是否已被删除。

我现在的问题是:有没有办法知道存储桶是否已在不使用更多内存(布尔向量)的情况下被删除?

LE:我使用 nullptr 解决了析构函数问题(现在似乎可以工作了),但是......另一个问题:我怎样才能准确地遍历每个存储桶 1 次(例如,用于查找最小和最大元素)。这次我不能使用 nullptr(指针需要留在原地 - 在存储桶上)

只需迭代使用擦除功能

while (size ())
{
    erase(begin());
}

我在 Hash 类中使用了一个指向存储桶的指针数组 从类桶。问题是可以有多个指针 同一个桶。

我现在的问题是:有没有办法知道一个桶是否已经 被删除而不使用更多内存(布尔向量)?

当然 - 使用引用计数。 将一个整数成员变量放在 Bucket 类中,初始化为零。 每当您创建指向该存储桶对象的指针时,请递增整数。 每当使指向存储桶的指针失效时(即,每当在该指针上调用 delete 时),请递减整数成员变量。 如果该递减导致整数变为零,则您知道存储桶没有更多指向它的指针,因此请删除存储桶。