C++中 unordered_map 与 map 的区别
16lz
2021-01-22
由于项目用到了,故抽空先大致记录一下unordered_map与map二者的区别
下面 以 unordered_map ( 无序map ) 为主进行比较。
1、头文件
#include <unordered_map>#include <map>
2、unordered_map 内部实现:哈希表
【而 map 内部实现了红黑树】
3、unordered_map 查找效率:非常高
unordered_map 内部的Hash表通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用。
【而 map 则需要挨个遍历查找,效率低下】
4、unordered_map 是否有序:无序
unordered_map 内部时哈希表,故当加入元素后,不会排序。
【而 map 内部实现了红黑树,故map存入元素时会自动排序,且默认升序】
分别举例子
举个 unordered_map 栗子:
unordered_map<int, string> m_map; m_map.insert(pair<int, string>(3, "333")); m_map.insert(pair<int, string>(1, "111")); m_map.insert(pair<int, string>(4, "444")); m_map.insert(pair<int, string>(2, "222")); m_map.insert(pair<int, string>(5, "555")); unordered_map<int, string>::iterator iter = m_map.begin(); for (iter; iter != m_map.end(); iter++) { cout << iter->first << "," << iter->second.c_str() << endl; }
输出:
3,3331,1114,4442,2225,555
unordered_map 输出结论:可看出为无序。
举个 map 栗子:代码里只是把 unordered_map 换成了 map 而已。
map<int, string> m_map; m_map.insert(pair<int, string>(3, "333")); m_map.insert(pair<int, string>(1, "111")); m_map.insert(pair<int, string>(4, "444")); m_map.insert(pair<int, string>(2, "222")); m_map.insert(pair<int, string>(5, "555")); map<int, string>::iterator iter = m_map.begin(); for (iter; iter != m_map.end(); iter++) { cout << iter->first << "," << iter->second.c_str() << endl; }
输出:
1,1112,2223,3334,4445,555
map 输出结论:可看出为有序。
结束:
分享也是自己对问题再次加深理解的方式,可能不全面,但绝对有用,后面将不断完善~
©著作权归作者所有:来自51CTO博客作者ALLIN君的原创作品,如需转载,请注明出处,否则将追究法律责任好知识,才能预见未来
赞赏
0人进行了赞赏支持
更多相关文章
- php获取数组中最后一个元素的方法
- php实现获取数组中相同/不相同的元素
- 为什么推荐使用for-each而不是for循环遍历元素?
- Selenium3自动化测试【12】元素定位认知
- Jquery对选取到的元素显示指定的长度,对于的字符串用“...”显示
- jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元
- scrollTop到溢出滚动div中的活动元素
- jQuery使用之(四)处理页面的表单元素
- jQuery遍历祖先元素:parentsUntil