资讯详情

STL中的map和set介绍

📅 2026/10/10 2:36:25 | 华诺云谱 👁 阅读
STL中的map和set介绍
序列式容器和关联式容器前面我们已经介绍过的STL中的部分容器如string、vector、list、deque、array等这些容器统称为序列式容器因为他们逻辑结构为线性序列两个位置存储的值之间一般没有紧密的关联关系比如交换一下仍是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的关联式容器也是用来存储数据的与序列式容器不同的是关联式容器逻辑结构通常是非线性结构两个位置有紧密的关联关系交换一下他的结构就被破坏了。关联式容器中的元素是按关键字key来保存和访问的。关联式容器有map/set系列和unordered_map/unordered_set系列本文所要介绍的map和set的底层是红黑树红黑树是一棵平衡二叉搜索树set是key搜索场景map则是key/value搜索场景set偷一下懒只介绍我觉得需要介绍的set分为两类一种是不允许存储重复数据的set另一种是允许存储重复数据的multiset下面我们介绍的是setC11以后还支持初始化列表初始化如set的使用中的示例lower_bound函数与upper_bound函数的功能现在还描述不清楚我们等到set的使用中的示例再讲其用途set的使用multiset的使用multiset的接口与set的接口一致我们直接进入使用环节map接口类似set不再重复赘述只介绍我认为有价值的operator[]函数有两种情况1、key不在map中插入2、key在map中查找和修改文档中如此描述此函数我们需要对map中的insert函数有一定认识重点是其参数返回值可以看出调用的是insert函数的第一个重载版本返回类型是pairiterator,bool我们再看一下文档了解一下下面是我自己的翻译仅供参考单返回元素1返回的pair的first是一个迭代器要么指向新插入的元素要么指向因map内已有相等元素而无法插入的那个元素。pair的second如果新元素被插入则是true如果相等的key已在map中则插入失败是false接下来我们就可以探究一下operator[]函数的等效函数个人技巧从中间括号往两边走第一层是mapped_type()是匿名对象第二层make_pair函数构造pair对象第三、四层调用insert函数第五层取insert返回对象pairiterator,bool的first迭代器的解引用最外层得到此迭代器指向结点的second即value这个函数set中也有但我们此处再介绍缓冲一下。返回树中k的迭代器区间左闭右开这个在set和map中和find函数区别不大主要功能体现在multiset和multimap中如map的使用void test3() { pairstring, string kv1 { east,东 }; pairstring, string kv2 { south,南 }; pairstring, string kv3 { west,西 }; pairstring, string kv4 { north,北 }; mapstring, string m1 { kv1,kv2,kv3,kv4 }; //先创建好pair对象再利用初始化列表构造map对象 mapstring, string m2 { {east,东},{ south,南 }, { west,西 }, { north,北 } }; //利用隐式类型转换转换成pair对象初始化列表构造 m2.insert(pairstring, string(student, 学生)); m2.insert(make_pair(college, 大学)); m2.insert({ internal,内部的 });//最简洁隐式类型转换成pair对象 mapstring, string::iterator i m2.begin(); while (i ! m2.end()) { //key不可以修改value可以 //i-first x; i-second x; //cout *i ; //编译器报错mao没有重载operaor,因为它结点存储有两个数据key/value cout i-first : i-second ; i; } cout endl; for (auto e : m2) { cout e.first : e.second ; } cout endl; //结构化绑定 C14/17语法 auto [k1, v1] kv1; auto [k2, v2] kv2; k2 k; v2 v; for (auto [k, v] : m2) { cout k : v ; } cout endl; }multimap的使用multimap与map的区别就是不去重插入时即使已经有相同的key也可以插入
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑