138 lines
3.3 KiB
Markdown
138 lines
3.3 KiB
Markdown
# HashMap
|
||
|
||
**命名空间**: `XCEngine::Containers`
|
||
|
||
**类型**: `class` (template)
|
||
|
||
**描述**: 模板哈希表容器,提供键值对存储和快速查找。
|
||
|
||
## 概述
|
||
|
||
`HashMap<Key, Value>` 是一个模板哈希表容器,实现了分离链接法的哈希表,支持键值对的插入、查找和删除操作。
|
||
|
||
## 公共类型
|
||
|
||
### Pair
|
||
|
||
| 成员 | 类型 | 描述 |
|
||
|------|------|------|
|
||
| `first` | `Key` | 键 |
|
||
| `second` | `Value` | 值 |
|
||
|
||
### 迭代器
|
||
|
||
| 别名 | 类型 | 描述 |
|
||
|------|------|------|
|
||
| `Iterator` | `typename Array<Pair>::Iterator` | 迭代器类型 |
|
||
| `ConstIterator` | `typename Array<Pair>::ConstIterator` | 常量迭代器类型 |
|
||
|
||
## 公共方法
|
||
|
||
### 构造/析构
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `HashMap()` | 默认构造(16 个桶) |
|
||
| `explicit HashMap(size_t bucketCount, Memory::IAllocator* allocator = nullptr)` | 指定桶数量和分配器 |
|
||
| `~HashMap()` | 析构函数 |
|
||
|
||
### 拷贝/移动构造
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `HashMap(const HashMap& other)` | 拷贝构造 |
|
||
| `HashMap(HashMap&& other) noexcept` | 移动构造 |
|
||
| `HashMap& operator=(const HashMap& other)` | 拷贝赋值 |
|
||
| `HashMap& operator=(HashMap&& other) noexcept` | 移动赋值 |
|
||
|
||
### 元素访问
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `Value& operator[](const Key& key)` | 下标访问(不存在时插入) |
|
||
|
||
### 查找
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `Value* Find(const Key& key)` | 查找键对应的值指针 |
|
||
| `const Value* Find(const Key& key) const` | 常量查找 |
|
||
| `bool Contains(const Key& key) const` | 检查是否包含键 |
|
||
|
||
### 插入/删除
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `bool Insert(const Key& key, const Value& value)` | 插入(拷贝值) |
|
||
| `bool Insert(const Key& key, Value&& value)` | 插入(移动值) |
|
||
| `bool Insert(Pair&& pair)` | 插入(移动键值对) |
|
||
| `bool Erase(const Key& key)` | 删除键对应的元素 |
|
||
| `void Clear()` | 清空所有元素 |
|
||
|
||
### 容量
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `size_t Size() const` | 获取元素数量 |
|
||
| `bool Empty() const` | 检查是否为空 |
|
||
|
||
### 迭代器
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `Iterator begin()` | 获取开始迭代器 |
|
||
| `Iterator end()` | 获取结束迭代器 |
|
||
| `ConstIterator begin() const` | 获取常量开始迭代器 |
|
||
| `ConstIterator end() const` | 获取常量结束迭代器 |
|
||
|
||
### 内存分配器
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `void SetAllocator(Memory::IAllocator* allocator)` | 设置内存分配器 |
|
||
|
||
## 实现细节
|
||
|
||
| 常量/成员 | 类型 | 描述 |
|
||
|------|------|------|
|
||
| `DefaultBucketCount` | `static constexpr size_t` | 默认桶数量(16) |
|
||
| `m_loadFactor` | `float` | 负载因子阈值(0.75) |
|
||
|
||
## 使用示例
|
||
|
||
```cpp
|
||
#include <XCEngine/Containers/HashMap.h>
|
||
|
||
// 基本用法
|
||
Containers::HashMap<Containers::String, int> map;
|
||
map.Insert("one", 1);
|
||
map.Insert("two", 2);
|
||
|
||
// 使用下标访问
|
||
map["three"] = 3;
|
||
|
||
// 查找
|
||
int* val = map.Find("one");
|
||
if (val) {
|
||
printf("Found: %d\n", *val);
|
||
}
|
||
|
||
// 使用 Contains
|
||
if (map.Contains("two")) {
|
||
printf("two exists\n");
|
||
}
|
||
|
||
// 删除
|
||
map.Erase("one");
|
||
|
||
// 迭代
|
||
for (auto& pair : map) {
|
||
printf("%s: %d\n", pair.first.CStr(), pair.second);
|
||
}
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [Array](./container-array.md) - 动态数组
|
||
- [Memory 模块](../memory/memory-overview.md) - 内存分配器
|