C++ 如何为哈希表编写有效的grow函数? 也许您应该尝试使用realloc。哈希表不会通过复制到更大分配的相同索引来扩展。您需要根据新的maxSize\uucode>重新编译,以发现“当我尝试使用大型哈希表运行它时,它花费的时间太长”?我正在使用各种大型输入调

C++ 如何为哈希表编写有效的grow函数? 也许您应该尝试使用realloc。哈希表不会通过复制到更大分配的相同索引来扩展。您需要根据新的maxSize\uucode>重新编译,以发现“当我尝试使用大型哈希表运行它时,它花费的时间太长”?我正在使用各种大型输入调,c++,performance,hashtable,C++,Performance,Hashtable,如何为哈希表编写有效的grow函数? 也许您应该尝试使用realloc。哈希表不会通过复制到更大分配的相同索引来扩展。您需要根据新的maxSize\uucode>重新编译,以发现“当我尝试使用大型哈希表运行它时,它花费的时间太长”?我正在使用各种大型输入调用我的insert函数,并查看每个调用花费的时间。对于我的grow函数,为什么不能将HashEntry数组放大?我是否需要将数组分配给tmp数组,重新分配数组,并为每个条目调用我的insert函数?是的,您需要根据新表大小计算每个条目的新哈希槽

如何为哈希表编写有效的grow函数?
也许您应该尝试使用realloc。哈希表不会通过复制到更大分配的相同索引来扩展。您需要根据新的
maxSize\uucode>重新编译,以发现“当我尝试使用大型哈希表运行它时,它花费的时间太长”?我正在使用各种大型输入调用我的insert函数,并查看每个调用花费的时间。对于我的grow函数,为什么不能将HashEntry数组放大?我是否需要将数组分配给tmp数组,重新分配数组,并为每个条目调用我的insert函数?是的,您需要根据新表大小计算每个条目的新哈希槽。
        HashEntry** tmp = new HashEntry * [maxSize_ * 2];
        for (int i = 0; i < maxSize_; i++) { 
            tmp[i] = entry_[i]; 
        }
        for (int i = maxSize_; i < maxSize_ * 2; i++) { 
            tmp[i] = nullptr; 
        }
        delete[] entry_; 
        entry_ = tmp; 
        maxSize_ *= 2;
        int oldSize = maxSize_;
        maxSize_ *= 2;
        HashEntry** tmp = entry_;
        entry_ = new HashEntry * [maxSize_];
        for (int i = 0; i < maxSize_; i++) {
            entry_[i] = nullptr;
        }
        for (int i = 0; i < oldSize; i++) {
            if (tmp[i] != nullptr) {
                update(tmp[i]->key_, tmp[i]->data_);
                numRecords_--;
                delete tmp[i];
            }
        }
        delete[] tmp;