std:: unordered_map
|
定义于头文件
<unordered_map>
|
||
|
template
<
class
Key,
|
(1) | (C++11 起) |
|
namespace
pmr
{
template
<
|
(2) | (C++17 起) |
std::unordered_map
是一种关联容器,包含具有唯一键的键值对。元素的搜索、插入和移除操作具有平均常数时间复杂度。
在内部,元素不会按特定顺序排序,而是被组织到多个桶中。元素被分配到哪个桶完全取决于其键的哈希值。具有相同哈希码的键会出现在同一个桶中。这使得可以快速访问单个元素,因为一旦计算出哈希值,它就直接指向包含该元素的桶。
两个键被认为是 等价的 ,当映射的键等价谓词在传入这些键时返回 true。如果两个键等价,则哈希函数必须为这两个键返回相同的值。
std::unordered_map
满足
Container
、
AllocatorAwareContainer
和
UnorderedAssociativeContainer
的要求。
std::unordered_map
的所有成员函数均为
constexpr
:可以在常量表达式求值过程中创建和使用
std::unordered_map
对象。
然而,
|
(C++26 起) |
目录迭代器失效
注释
模板参数
成员类型
成员函数
非成员函数
注释
示例
运行此代码
#include <iostream> #include <string> #include <unordered_map> int main() { // 创建一个包含三个字符串(映射到字符串)的 unordered_map std::unordered_map<std::string, std::string> u = { {"RED", "#FF0000"}, {"GREEN", "#00FF00"}, {"BLUE", "#0000FF"} }; // 用于打印键值对的辅助 lambda 函数 auto print_key_value = [](const auto& key, const auto& value) { std::cout << "Key:[" << key << "] Value:[" << value << "]\n"; }; std::cout << "遍历并打印 unordered_map 的键值对,\n" "显式指定其类型:\n"; for (const std::pair<const std::string, std::string>& n : u) print_key_value(n.first, n.second); std::cout << "\n使用 C++17 结构化绑定遍历并打印键值对:\n"; for (const auto& [key, value] : u) print_key_value(key, value); // 向 unordered_map 添加两个新条目 u["BLACK"] = "#000000"; u["WHITE"] = "#FFFFFF"; std::cout << "\n通过键输出值:\n" "颜色 RED 的 HEX 值为:[" << u["RED"] << "]\n" "颜色 BLACK 的 HEX 值为:[" << u["BLACK"] << "]\n\n"; std::cout << "对不存在的键使用 operator[] 插入新的键值对:\n"; print_key_value("new_key", u["new_key"]); std::cout << "\n使用 `auto` 遍历并打印键值对;\n" "new_key 现在已成为映射中的键之一:\n"; for (const auto& n : u) print_key_value(n.first, n.second); } 可能的输出: 遍历并打印 unordered_map 的键值对, 显式指定其类型: Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] 使用 C++17 结构化绑定遍历并打印键值对: Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] 通过键输出值: 颜色 RED 的 HEX 值为:[#FF0000] 颜色 BLACK 的 HEX 值为:[#000000] 对不存在的键使用 operator[] 插入新的键值对: Key:[new_key] Value:[] 使用 `auto` 遍历并打印键值对; new_key 现在已成为映射中的键之一: Key:[new_key] Value:[] Key:[WHITE] Value:[#FFFFFF] Key:[BLACK] Value:[#000000] Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] 缺陷报告以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
另请参阅
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||