头文件 | 包含 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 不是合适的选择。 |