C++数据结构之map学习
[TOC]
文章参考:https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html
文章参考:http://c.biancheng.net/view/7235.html
概述
map底层实现
C++ STL 标准库中,不仅是 unordered_map 容器,所有无序容器的底层实现都采用的是哈希表存储结构。更准确地说,是用“链地址法”(又称“开链法”)解决数据存储位置发生冲突的哈希表,整个存储结构如图 1 所示。
其中,Pi 表示存储的各个键值对。
可以看到,当使用无序容器存储键值对时,会先申请一整块连续的存储空间,但此空间并不用来直接存储键值对,而是存储各个链表的头指针,各键值对真正的存储位置是各个链表的节点。
map[]和map.at()取值之间的区别
文章参考:https://blog.csdn.net/guotianqing/article/details/108896065
文章参考:http://c.biancheng.net/view/7177.html
注意,aMap是map类的对象,通过aMap[key]取值和通过aMap.at(key)取值的区别如下:
aMap[key]如果key不存在会添加key,不会抛出异常;
aMap.at(key)会检查key,如果不存在会抛出异常。
本节所介绍的几种方法中,仅从“在 map 容器存储的键值对中,获取指定键对应的值”的角度出发,更推荐使用 at() 成员方法,因为该方法既简单又安全。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus