ZBLOG

列一个哈希表结构体

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

  1. #include <iostream>
  2. #include <vector>
  3. struct HashNode {
  4. int key;
  5. std::string value;
  6. HashNode(int k, const std::string& v) : key(k), value(v) {}
  7. };
  8. class HashTable {
  9. private:
  10. std::vector<std::vector<HashNode>> buckets; // 存储桶数组
  11. int numBuckets; // 桶的数量
  12. public:
  13. HashTable(int n) : numBuckets(n) {
  14. buckets.resize(numBuckets);
  15. }
  16. void insert(int key, const std::string& value) {
  17. int index = key % numBuckets; // 计算哈希值并确定插入位置
  18. for (auto& node : buckets[index]) {
  19. if (node.key == key) { // 如果键已存在,更新对应值
  20. node.value = value;
  21. return;
  22. }
  23. }
  24. buckets[index].push_back(HashNode(key, value)); // 键不存在,则在链表末尾添加新节点
  25. }
  26. std::string get(int key) {
  27. int index = key % numBuckets; // 计算哈希值并确定查找位置
  28. for (const auto& node : buckets[index]) {
  29. if (node.key == key)
  30. return node.value; // 找到对应键,返回对应值
  31. }
  32. return ""; // 键不存在,返回空字符串
  33. }
  34. void remove(int key) {
  35. int index = key % numBuckets; // 计算哈希值并确定删除位置
  36. auto& bucket = buckets[index];
  37. for (auto it = bucket.begin(); it != bucket.end(); ++it) {
  38. if ((*it).key == key) { // 找到对应键,删除节点
  39. bucket.erase(it);
  40. return;
  41. }
  42. }
  43. }
  44. };

这是一个基本的哈希表实现,使用了vector作为存储桶数组,每个桶是一个链表。它包含插入、查找和删除操作。你可以根据需要进行进一步扩展和修改。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?