下面是一个简单的哈希表结构体的示例:
#include <iostream>
#include <vector>
struct HashNode {
int key;
std::string value;
HashNode(int k, const std::string& v) : key(k), value(v) {}
};
class HashTable {
private:
std::vector<std::vector<HashNode>> buckets; // 存储桶数组
int numBuckets; // 桶的数量
public:
HashTable(int n) : numBuckets(n) {
buckets.resize(numBuckets);
}
void insert(int key, const std::string& value) {
int index = key % numBuckets; // 计算哈希值并确定插入位置
for (auto& node : buckets[index]) {
if (node.key == key) { // 如果键已存在,更新对应值
node.value = value;
return;
}
}
buckets[index].push_back(HashNode(key, value)); // 键不存在,则在链表末尾添加新节点
}
std::string get(int key) {
int index = key % numBuckets; // 计算哈希值并确定查找位置
for (const auto& node : buckets[index]) {
if (node.key == key)
return node.value; // 找到对应键,返回对应值
}
return ""; // 键不存在,返回空字符串
}
void remove(int key) {
int index = key % numBuckets; // 计算哈希值并确定删除位置
auto& bucket = buckets[index];
for (auto it = bucket.begin(); it != bucket.end(); ++it) {
if ((*it).key == key) { // 找到对应键,删除节点
bucket.erase(it);
return;
}
}
}
};
这是一个基本的哈希表实现,使用了vector作为存储桶数组,每个桶是一个链表。它包含插入、查找和删除操作。你可以根据需要进行进一步扩展和修改。
内容由零声教学AI助手提供,问题来源于学员提问