在学习 C++数据结构 的过程中,哈希表(Hash Table)是一个非常重要且实用的工具。它能以接近 O(1) 的时间复杂度完成插入、查找和删除操作。本教程将带你从零开始,用 C++ 实现一个最基础的哈希表,即使你是编程小白,也能轻松理解!
哈希表是一种通过“键”(key)快速访问“值”(value)的数据结构。它的核心思想是使用一个哈希函数将键映射到数组的某个索引位置,从而实现快速存取。

哈希函数的作用是将任意大小的输入(如字符串、整数等)转换为固定范围内的整数(通常是数组下标)。例如,对整数 key,我们可以使用取模运算:
int hash(int key, int tableSize) { return key % tableSize;}这个简单的哈希函数就是 哈希函数原理 的体现。但在实际中,我们还要处理“冲突”问题——即两个不同的 key 映射到同一个索引。
最常用的解决冲突的方法是“链地址法”(Chaining):每个数组元素是一个链表,所有哈希到同一位置的元素都存入该链表中。
下面,我们用 C++ 实现一个支持整数键的简单哈希表。我们将使用 vector 存储桶(buckets),每个桶是一个 list(链表)。
#include <iostream>#include <vector>#include <list>using namespace std;class SimpleHashTable {private: vector<list<int>> buckets; int tableSize; // 哈希函数 int hash(int key) { return key % tableSize; }public: // 构造函数 SimpleHashTable(int size = 10) : tableSize(size) { buckets.resize(tableSize); } // 插入元素 void insert(int key) { int index = hash(key); buckets[index].push_back(key); } // 查找元素 bool search(int key) { int index = hash(key); for (int value : buckets[index]) { if (value == key) { return true; } } return false; } // 删除元素(只删除第一个匹配项) void remove(int key) { int index = hash(key); auto& bucket = buckets[index]; for (auto it = bucket.begin(); it != bucket.end(); ++it) { if (*it == key) { bucket.erase(it); return; } } } // 打印哈希表(用于调试) void print() { for (int i = 0; i < tableSize; ++i) { cout << "Bucket " << i << ": "; for (int val : buckets[i]) { cout << val << " "; } cout << endl; } }};// 测试代码int main() { SimpleHashTable ht(7); // 创建大小为7的哈希表 ht.insert(10); ht.insert(20); ht.insert(15); ht.insert(7); ht.print(); cout << "Search 15: " << (ht.search(15) ? "Found" : "Not Found") << endl; cout << "Search 25: " << (ht.search(25) ? "Found" : "Not Found") << endl; ht.remove(15); cout << "After removing 15:\n"; ht.print(); return 0;}通过本教程,你已经掌握了 C++哈希表实现 的基本思路。虽然这个版本非常基础(仅支持整数、无动态扩容、无负载因子控制),但它涵盖了 哈希表基础教程 的核心概念:哈希函数、冲突处理、插入/查找/删除操作。
下一步你可以尝试:支持字符串 key、实现动态扩容、使用更高效的哈希函数(如 djb2)、或改用开放寻址法处理冲突。掌握这些,你就真正理解了 C++ 中 unordered_map 的底层原理!
本文由主机测评网于2025-12-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127597.html