hash_map底层是用hash表存储的,查询时间复杂度是O(1); unordered_map和hash_map基本一样,只是unordered_map已经加到C++11标准(编译时添加编译选项:--std=c++11),而hash_map未加入在C++11标准中。 由于map使用红黑树实现,所以是有序存储的,因此map的key需要定义operator<,而hash_map和unordered_map是基于hash无...
此文首发于个人技术号:剖析 std::unordered_map O(1)时间复杂度的原理 欢迎点击原文直接关注,或者vx搜一搜:look_code_art,更多硬核内容,让你相见恨晚。 std::unordered_map里面has-a哈希表,它提供的的各个方法基本都是由hashtable封装实现,因此在下文使用hashtable来描述std::unordered_map。 // gnu 实现 templa...
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) unordered_map,unordered_set,unordered_multimap, and unordered_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),...
而std::unordered_map对应哈希表,哈希表的特点就是查找效率高,时间复杂度为常数级别O(1), 而额外空间复杂度则要高出许多。 所以对于需要高效率查询的情况,使用std::unordered_map容器,但是std::unordered_map对于迭代器遍历效率并不高。 而如果对内存大小比较敏感或者数据存储要求有序的话,则可以用std::map容器。
但是通常我们想度量的是计算时间。 接下来我们以插入排序算法为切入点一窥时间复杂度的计算方法。
unordered_map原来属于boost分支和std::tr1中,而hash_map属于非标准容器。 unordered_map感觉速度和hash_map差不多,但是支持string做key,也可以使用复杂的对象作为key。 unordered_map编译时gxx需要添加编译选项:–std=c++11 2. unordered_map实现原理 使用:hashtable + bucket ...