哈希表副本无法使用查找功能查找单词

时间:2017-04-01 17:32:08

标签: c++ hashmap logic hashtable

我正在构建一个使用线性探测作为其冲突解决方法的哈希表,并且我最后一次检查了。复制到表中无法找到应该存在的密钥,因为它在检查之前已从原始哈希表中删除。

template <class TYPE>
LPTable<TYPE>::LPTable(const LPTable<TYPE>& other){


    max_ = other.max_;
    LargerMax = other.LargerMax;
    size_ = other.size_;

    if (other.size_)
    {
            records_ = new Record*[other.LargerMax];


            for (int i = 0; i < other.size_; i++) // chasnged size from larger max
            {

                    if (other.records_[i] != nullptr)
                    {
                            records_[i] = new Record();    //throws exception after this loop

                            records_[i]->key_ = other.records_[i]->key_;
                            records_[i]->data_ = other.records_[i]->data_;
                            records_[i]->isDeleted = other.records_[i]->isDeleted;


                    }
            }
    }
    else
            size_ = 0;

}

1 个答案:

答案 0 :(得分:0)

records_类的LPTable字段不必是指向指针的指针;一个指针就足够了,这很可能是你问题的根源。此外,你应该非常可能更喜欢这个任务的向量。

您看到的奇怪行为是因为LPTable的复制构造函数中的错误。你正在分配一个指针数组,然后遍历other并复制指针。

换句话说,您不是要复制指针引用的Record实例。

“复制自”和“复制到”LPTable的records_数组中的对应指针引用Record类的相同实例。因此,当您修改“复制自”哈希表中的条目时,这些更改将反映在“复制到”哈希表中