在现代软件开发中,C++布谷鸟哈希是一种非常高效的哈希表实现方式。它以高空间利用率和确定性的查找时间著称,特别适合对性能要求严苛的场景。本教程将手把手带你从零开始理解并实现一个简单的布谷鸟哈希表,即使你是编程小白,也能轻松掌握!
布谷鸟哈希(Cuckoo Hashing)灵感来源于布谷鸟的繁殖行为——布谷鸟会将自己的蛋放入其他鸟的巢中,如果巢满了,就“踢出”一个蛋。类似地,在布谷鸟哈希中,每个元素有两个可能的位置(由两个不同的哈希函数决定)。当插入新元素时,如果目标位置已被占用,就将原元素“踢出”,并尝试将其重新安置到它的另一个位置,如此递归,直到所有元素都安顿好。
我们将使用两个哈希表(用 vector 模拟)和两个简单的哈希函数来实现布谷鸟哈希。以下是完整代码:
#include <iostream>#include <vector>#include <stdexcept>#include <random>class CuckooHash {private: static const int MAX_LOOP = 500; // 防止无限循环 std::vector<int> table1; std::vector<int> table2; int size; int hash2(int key) { return key % size; } int hash2(int key) { return (key / size) % size; } void rehash() { // 简化版:实际应用中应重建更大的表 throw std::runtime_error("Rehash needed! Table too full."); }public: CuckooHash(int s) : size(s) { table1.assign(size, -1); table2.assign(size, -1); } bool insert(int key) { int current = key; for (int i = 0; i < MAX_LOOP; ++i) { int idx1 = hash2(current); if (table1[idx1] == -1) { table1[idx1] = current; return true; } else { std::swap(table1[idx1], current); } int idx2 = hash2(current); if (table2[idx2] == -1) { table2[idx2] = current; return true; } else { std::swap(table2[idx2], current); } } // 如果循环太多次,说明表太满,需要扩容 rehash(); return false; } bool search(int key) { return (table1[hash2(key)] == key) || (table2[hash2(key)] == key); } void print() { std::cout << "Table1: "; for (int x : table1) std::cout << x << " "; std::cout << "\nTable2: "; for (int x : table2) std::cout << x << " "; std::cout << std::endl; }};int main() { CuckooHash cuckoo(7); try { cuckoo.insert(10); cuckoo.insert(20); cuckoo.insert(30); cuckoo.insert(40); cuckoo.print(); std::cout << "Search 20: " << (cuckoo.search(20) ? "Found" : "Not Found") << std::endl; std::cout << "Search 99: " << (cuckoo.search(99) ? "Found" : "Not Found") << std::endl; } catch (std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } return 0;}
上面的代码实现了基本的布谷鸟哈希功能:
table1 和 table2 是两个哈希表,初始值为 -1 表示空位。hash2 和 hash2 是两个简单的哈希函数。insert 函数尝试将元素放入两个表之一;如果位置被占,则“踢出”原元素并继续处理。MAX_LOOP),超过则抛出异常(实际项目中应触发 rehash 扩容)。本例是教学简化版。在真实应用中,你可以:
通过本教程,你已经掌握了 C++布谷鸟哈希 的核心思想和基础实现。这种 高效哈希算法 在现代 C++数据结构 设计中具有重要价值。希望你能在此基础上继续探索,构建更强大的 哈希表实现!
© 2023 C++ 数据结构学习指南 | 专注高效算法教学
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125226.html