用C++实现哈希表的大小调整
Implementing resize of a hash table in C++
我在c++中实现调整大小或扩展容量函数时遇到问题。这是我的调整大小(expandCapacity(功能:
template <typename K, typename V> void HashTable<K, V>::expandCapacity() {
LinearDictionary<K,V>* temp = this->hashTable;
this->capacity *= 2;
this->hashTable = new LinearDictionary<K,V>[this->capacity];
for(int i = 0; i < capacity; i++){
vector<pair<K,V>> items = temp[i].getItems();
for(int j = 0;j < temp[i].getSize(); i++){
K key = items[j].first;
V value = items[j].second;
int bucket = hash(key, capacity);
this->hashTable[bucket].insert(key, value);
}
}
delete temp;
}
这是我的插入函数:
template <typename K, typename V> void HashTable<K, V>::insert(K key, V value) {
int bucket = hash(key, capacity);
if(this->hashTable[bucket].contains(key)){
throw runtime_error("This key already exists");
}
this->hashTable[bucket].insert(key,value);
size+=1;
float loadFactor = (float)(size)/(float)(capacity);
if(loadFactor >= maxLoadFactor){
this->expandCapacity();
}
}
模板K表示键,V表示值。哈希表被实现为一个指向线性字典数组的指针(我自己实现的一个类本质上是一个键值对列表,它对字典有一些额外的有用功能(。但这似乎并没有扩大产能。相反,我不断得到一个错误"密钥已经存在"——这是我的教授实现的运行时错误。
您的i
循环执行了太多迭代。当它正在访问的temp
数据仅具有旧容量元素时,它基于新容量进行循环。
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- C++中的并发哈希表
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 与C++哈希表的基础知识混淆
- 调整大小和复制哈希表数组中的元素
- 带链接的基本哈希表
- C++哈希表中,两个相同的实现,但一个给出错误
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 查找项目在哈希表中的位置
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 使用哈希表设置实现
- 同时写入和读取哈希表
- 在 C++ 中为特定哈希表创建插入函数
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 在哈希表中调整字符串数组的大小
- 哈希表实现大小调整功能
- STL哈希表大小调整