【发布时间】:2016-01-23 19:45:03
【问题描述】:
所以我实现了一个存储指针的哈希表。我将它实现为vector 的lists。沿着std::vector<std::list<Sequence*> > hashTable; 的路线。我已经实现了一切,它工作正常。当我尝试重新散列哈希表时,我唯一的问题出现了。哈希表使用单独的链接来解决冲突,因此我的列表向量。
使用调试器,我发现我的 rehash 循环挂在 while 循环上并导致无限循环。它不断地从我的旧向量的第一个索引中读取。我是新手,我不确定重新散列这张表的正确方法。我试图研究并发现对这种哈希表实现的引用并不多,更不用说重新哈希表了。这是我的实现。
void HashTable::rehash(int oldSize){
int tempSize = 2 * oldSize;
int newSize = HashTable::findPrime(tempSize);
std::vector<std::list< Sequence*> > newHashTable;
newHashTable.resize(newSize);
tableSize = newSize;
for(int i = 0; i < oldSize; i++){
auto iter = hashTable[i].begin();
while(iter != hashTable[i].end()){
if((*iter) != nullptr){
std::string tempString = (*iter)->getKey();
int hashIndex = hashFunction(tempString);
newHashTable[hashIndex].push_front(*iter);
}
}
}
hashTable = newHashTable;
}
我觉得这是一个简单的错误,我只是没有看到它。还是我完全走错了路?
【问题讨论】:
-
有理由不使用
std::unordered_map吗? -
@m.s.是的,这是一个任务。我不允许使用
std::unordered_map。
标签: c++ c++11 vector stl hashtable