ZBLOG

列一个哈希表结构体

下面是一个简单的哈希表结构体的示例:

#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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8476

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?