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