C++ 具名要求:无序关联容器 (UnorderedAssociativeContainer) (C++11 起)
无序关联容器 是提供基于键的快速对象查找的容器 (Container) 。 最坏情况的复杂度为线性,但平均而言大多数操作则快得多。
无序关联容器基于以下各项参数化:Key;Hash,表现为 Key 上散列函数的散列 (Hash) 函数对象;Pred,评估 Key 间的等价性的二元谓词 (BinaryPredicate) 。
std::unordered_map 与 std::unordered_multimap 还拥有与 Key 关联的被映射类型 T。
如果两个 Key 按照 Pred 比较为相等,那么 Hash 必须对两个键返回相同值。
|
如果 |
(C++20 起) |
std::unordered_map 与 std::unordered_set 能容纳至多一个带给定键的元素,而 std::unordered_multiset 与 std::unordered_multimap 能拥有带同一键的多个元素(它们在迭代时必然相邻)。
对于 std::unordered_set 和 std::unordered_multiset,它们的值类型与键类型相同,且 iterator 和 const_iterator 都是常量迭代器。对于 std::unordered_map 与 std::unordered_multimap,值类型是 std::pair<const Key, T>。
无序关联容器中的元素被组织到桶中,拥有相同散列值的键将归于相同的桶中。 桶数在容器大小增加时增加,以保持每个桶中的平均元素数在某个确定值之下。
重散列会使迭代器失效,并可能导致元素被重排到不同的桶中,但不会使元素的引用失效。
无序关联容器满足知分配器容器 (AllocatorAwareContainer) 的要求。对于 std::unordered_map 与 std::unordered_multimap,