C++ 具名要求:无序关联容器 (UnorderedAssociativeContainer) (C++11 起)

来自cppreference.com
Lynnboy留言 | 贡献2024年11月22日 (五) 05:33的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)


 
 
C++ 具名要求
 

无序关联容器 是提供基于键的快速对象查找的容器 (Container) 。 最坏情况的复杂度为线性,但平均而言大多数操作则快得多。

无序关联容器基于以下各项参数化:KeyHash,表现为 Key 上散列函数的散列 (Hash) 函数对象;Pred,评估 Key 间的等价性的二元谓词 (BinaryPredicate) std::unordered_mapstd::unordered_multimap 还拥有与 Key 关联的被映射类型 T

如果两个 Key 按照 Pred 比较为相等,那么 Hash 必须对两个键返回相同值。

如果 Hash::is_transparentPred::is_transparent 均存在且均代表类型,那么成员函数 findcontainscountequal_range 接受异于 Key 的实参类型并期待 Hash 能以那些类型调用,而 Pred 是如 std::equal_to<> 的透明比较函数。

(C++20 起)

std::unordered_mapstd::unordered_set 能容纳至多一个带给定键的元素,而 std::unordered_multisetstd::unordered_multimap 能拥有带同一键的多个元素(它们在迭代时必然相邻)。

对于 std::unordered_setstd::unordered_multiset,它们的值类型与键类型相同,且 iteratorconst_iterator 都是常量迭代器。对于 std::unordered_mapstd::unordered_multimap,值类型是 std::pair<const Key, T>

无序关联容器中的元素被组织到桶中,拥有相同散列值的键将归于相同的桶中。 桶数在容器大小增加时增加,以保持每个桶中的平均元素数在某个确定值之下。

重散列会使迭代器失效,并可能导致元素被重排到不同的桶中,但不会使元素的引用失效。

无序关联容器满足知分配器容器 (AllocatorAwareContainer) 的要求。对于 std::unordered_mapstd::unordered_multimap