| 头文件 | 包含 unordered_map 的定义 | #include <unordered_map> | #include <unordered_map> |
| 声明 | 声明一个 unordered_map 对象 | std::unordered_map<KeyType, ValueType> mapName; | std::unordered_map<std::string, int> ages; |
| 插入元素 | 向 unordered_map 中插入键值对 | mapName[key] = value; 或 mapName.insert({key, value}); 或 mapName.emplace(key, value); | ages["Alice"] = 30; ages.insert({"Bob", 25}); ages.emplace("Charlie", 35); |
| 访问元素 | 通过键访问对应的值 | mapName[key] 或 mapName.at(key) | int aliceAge = ages["Alice"]; int bobAge = ages.at("Bob"); |
| 查找元素 | 检查 unordered_map 中是否存在某个键 | mapName.count(key) 或 mapName.find(key) | if (ages.count("Alice")) { /* 键存在 */ } auto it = ages.find("Bob"); if (it != ages.end()) { /* 键存在,值是 it->second */ } |
| 删除元素 | 从 unordered_map 中删除指定的键值对 | mapName.erase(key) 或 mapName.erase(iterator) 或 mapName.erase(begin_iterator, end_iterator) | ages.erase("Charlie"); auto it = ages.find("Bob"); if (it != ages.end()) { ages.erase(it); } ages.erase(ages.begin(), ages.end()); |
| 判空 | 检查 unordered_map 是否为空 | mapName.empty() | if (ages.empty()) { /* map 为空 */ } |
| 获取大小 | 获取 unordered_map 中键值对的数量 | mapName.size() | size_t numElements = ages.size(); |
| 迭代器 | 遍历 unordered_map 中的所有键值对 | mapName.begin(), mapName.end(), mapName.cbegin(), mapName.cend() | cpp for (const auto& pair : ages) { std::cout << pair.first << ": " << pair.second << std::endl; } |
| 清空 | 移除 unordered_map 中的所有元素 | mapName.clear() | ages.clear(); |
| 键类型要求 | 作为键的类型需要支持相等比较 (==) 和计算哈希值 (std::hash) | 任何满足这些要求的类型都可以作为键 | std::string, int, char 等内置类型,以及自定义的类(需要重载 == 并提供 std::hash 的特化版本) |
| 无序性 | 元素在 unordered_map 中没有特定的顺序(不同于 std::map) | 插入顺序和遍历顺序可能不一致 | 注意在需要有序遍历时,unordered_map 不是合适的选择。 |