C++ 关联式容器:map 与 set 详解
C++ STL 中的关联式容器,包括 set、multiset、map 和 multimap。这些容器基于红黑树实现,提供有序存储和高效查找功能。文章详细讲解了键值对结构、各容器的特性差异(如是否允许重复键)、常用操作接口(插入、删除、查找)以及 map 下标运算符的使用场景。重点阐述了如何利用 set 进行排序去重,以及利用 map 统计元素出现次数。

C++ STL 中的关联式容器,包括 set、multiset、map 和 multimap。这些容器基于红黑树实现,提供有序存储和高效查找功能。文章详细讲解了键值对结构、各容器的特性差异(如是否允许重复键)、常用操作接口(插入、删除、查找)以及 map 下标运算符的使用场景。重点阐述了如何利用 set 进行排序去重,以及利用 map 统计元素出现次数。

通过 key 找 value,表示具有一一对应关系的结构。一般包含 key 和 value 两个成员变量。例如英汉字典,英文单词(key)对应中文含义(value)。
STL 实现了两种管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。共同点是使用平衡搜索树(红黑树)作为底层结构,元素是有序序列(中序遍历)。
需先查看文档学习接口。迭代器使用方法与其他容器相同。
set 根据搜索二叉树的中序遍历插入,可对一组数排序并自动去重。
与 set 类似,最大区别是支持存储重复数据。
定义在头文件中,将两个不同类型的值组合成一个对象。可用 make_pair 函数构建。
常用参数为 value_type 引用(即 pair 对象)。打印时不能直接解引用访问,需用点(.)或箭头(->)访问 pair 成员。建议范围 for 循环加引用以避免拷贝代价。
map 根据键值去重,字符串排序依次根据首字母 ASCII 码值进行。
与 multiset 对应,map 也有对应的 multimap 容器。区别在于可以插入重复键值 k。
if (it == end()) insert(...); return it->second;mapCount[e] 进行 ++,即对键值 e 对应结点的 second 进行累加,达到计数功能。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online