场景
C++
有没有类似的Java
的类HashMap
,可以在数据量大的时候查询元素时间复杂度是常量时间的?
说明
-
C++11
开始有哈希map
,名字是不太好记的unordered_map
。 -
C++
标准委员会之所以不把unordered_map
命名为hash_map
,因为这个类在C++11
出现之前就已经有平台的实现,也是用的hash_map
名。 -
unordered_map
的特性是元素存储是无序的,是以复数的桶装方式存储,每个桶可存储一个以上的元素。 -
元素的搜索、插入和删除具有平均的常数时间复杂度。这个时间复杂度是以称为负载因子来决定的。负载因子是存储元素和桶的比值,默认是
1.0
.当元素增加超过阈值时,unordered_map
会自动扩容,在扩容过程中,插入操作可能会变慢。 只有当负载因子超过阈值时,需要增加桶以确保查询操作时间复杂度在O(1),还需要计算所有元素的hash
值并且分配到新的桶中。 -
目前可以作为
unorderred_map