使用哈希算法完成MyHash类,实现简单的哈希类。添加private属性之后,完善相应的public函数
时间: 2024-02-03 20:14:38 浏览: 170
以下是一个简单的MyHash类的实现,使用了线性探测法解决哈希冲突:
```c++
#include <iostream>
#include <string>
using namespace std;
const int TABLE_SIZE = 100;
class MyHash {
private:
string keys[TABLE_SIZE]; // 存储键
int values[TABLE_SIZE]; // 存储值
public:
MyHash() {
for (int i = 0; i < TABLE_SIZE; ++i) {
keys[i] = "";
values[i] = -1;
}
}
// 哈希函数,将键转换为哈希表中的索引
int hash(string key) {
int sum = 0;
for (char c : key) {
sum += c;
}
return sum % TABLE_SIZE;
}
// 插入键值对
void insert(string key, int value) {
int index = hash(key);
while (keys[index] != "" && keys[index] != key) {
index = (index + 1) % TABLE_SIZE; // 线性探测法解决哈希冲突
}
keys[index] = key;
values[index] = value;
}
// 查找键对应的值
int get(string key) {
int index = hash(key);
while (keys[index] != "") {
if (keys[index] == key) {
return values[index];
}
index = (index + 1) % TABLE_SIZE;
}
return -1; // 键不存在
}
// 删除键值对
void remove(string key) {
int index = hash(key);
while (keys[index] != "") {
if (keys[index] == key) {
keys[index] = "";
values[index] = -1;
return;
}
index = (index + 1) % TABLE_SIZE;
}
}
};
int main() {
MyHash hashTable;
hashTable.insert("apple", 5);
hashTable.insert("banana", 2);
hashTable.insert("cherry", 8);
cout << hashTable.get("apple") << endl; // 输出 5
hashTable.remove("banana");
cout << hashTable.get("banana") << endl; // 输出 -1
return 0;
}
```
以上实现中,MyHash类使用了一个固定大小的哈希表(即TABLE\_SIZE),并使用keys和values数组存储键值对。在插入、查找和删除操作中,首先使用hash函数将键转换为哈希表中的索引,然后使用线性探测法解决哈希冲突。最后,使用keys和values数组分别存储键和值。
阅读全文