首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++】map & set

1. set (1)set 的介绍 首先我们可以看一下 set 的文档介绍:set 文档介绍....简单概括: set 是按照一定次序存储元素的容器 在 set 中,元素的 value 也标识它(value就是 key,类型为 T),并且每个 value 必须是唯一的。...set 中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。 set 在底层是用二叉搜索树(红黑树)实现的。...set 中的元素不可以重复 (因此可以使用set进行去重) ; 使用 set 的迭代器遍历 set 中的元素,可以得到有序序列; set 中的元素默认按照小于来比较; set 中查找某个元素,时间复杂度为...:O(logN). (2)set 的使用 在使用之前我们先看一下 set 的模板参数列表: 其中: T: set 中存放元素的类型,实际在底层存储 的键值对。

9510
您找到你想要的搜索结果了吗?
是的
没有找到

C++】map 和 set

的介绍 2、map 的使用 五、multimap 一、关联式容器与键值对 1、关联式容器 在C++初阶的时候,我们已经接触了 STL 中的部分容器并进行了模拟实现,比如 vector、list、stack...first(T1()), second(T2()) //默认构造 {} pair(const T1& a, const T2& b) : first(a), second(b) {} }; 可以看到,C+...make_pair 函数 由于 pair 是类模板,所以我们通常是以 显式实例化 + 匿名对象 的方式来进行使用,但是由于显式实例化比较麻烦,所以 C++ 还提供了 make_pair 函数,其定义如下...set 文档:set - C++ Reference (cplusplus.com) ---- 三、multiset multiset 的介绍 multiset 也是 K模型 的容器,它和 set 唯一的区别在于...如果大家对 multimap的使用还有不清楚的地方,建议查阅 multimap文档:multimap - C++ Reference (cplusplus.com) ----

56400

C++set用法详解

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作...关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。...C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。...注意: 1、set中的元素都是排好序的 2、set集合中没有重复的元素 关于set有下面几个问题: (1)为何map和set的插入删除效率比用其他序列容器高?...这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

88710

C++之map和set

2.set set的介绍 set是按照一定次序存储元素的容器,set中的元素总是按照内部比较对象(类型比较)所指示的特定排序准则进行排序,使用set的迭代器遍历set可以得到有序序列,注意:set中的元素默认按小于进行排序...就是key,类型为T),并且每一个value都必须是唯一的,即set中的元素是不能重复的,因此可以用set进行去重; set中的元素不能在容器中进行修改,只能进行增、删、查等操作; set查找某个元素的时间复杂度为...set的构造 set的迭代器 set的容量 set的操作 set的应用举例 #include int main() { int arr[] = { 1, 2, 5,...用一个代码看一下它与set的区别: #include //set和multiset的头文件都是set void TestSet() { int array[] = { 2, 1, 3, 3,...本文作者目前也是正在学习C++相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

71430

C++】map和set的封装

一、前情回顾 set 参数只有 key,但是map除了key还有value。...: 对于map:传key,对于set:传pair map的结构简化源码: set的结构简化源码: 为了让我们的红黑树能够识别set与map我们增加一个模板参数T: template<class K...如果是set容器,那么它传入底层红黑树的模板参数就是Key和Key: template class set { private: RBTree _t; }; 如果是...**红黑树的节点**:set容器:K和T都是键值Key; map容器:K是键值Key,T由Key和Value构成的键值对;但是底层红黑树并不知道上层容器到底是map还是set,因此红黑树的结点当中直接存储...map还是set容器,当需要进行两个结点键值的比较时,底层红黑树传入的仿函数来获取键值Key,进行两个结点键值的比较:这个时候我们就需要仿函数了,如果是set那就是用于返回T当中的键值Key,如果是map

13420

C++】map和set的封装

在STL中的map与set 在STL中,map和set都是使用的红黑树 ---- map与set在STL中实现是一样的 对于value_type,map的第二个模板参数是pair,而set的第二个模板参数是...key 这样写是为了map和set使用同一颗红黑树去复用map和set ---- set -> rb_tree map - > rb_tree<K,pair...,所以不知道到底传过来的是什么 所以使用 模板类型的 data 代替 ---- 在结构定义时,为了让map与set都能调用同一颗红黑树,所以把模板参数改为T 当set要调用时,T变为 当map...还是map,无法知道T代表什么 但是在使用set或者map内部是知道的,所以 分别在map和set内部各自创建一个内部类,其中都写一个operator() ---- 在函数模板中添加一个参数,即可找到对应...map/set的key值 ---- 在红黑树内部,使用类实例化一个对象kot,通过kot去调用map/set 中相同的operator() ,取出对应的key值 迭代器 set/map的迭代器是红黑树内部的迭代器

15030

C++set和map的使用

对于STL容器来说,有很多相似的功能,所以这里主要将与之前不同的功能说清楚 @TOC 1.对于set与map的简单理解 vector/list/deque 作为序列式容器(类似于线性表的存储方式) map...与set作为关联式容器,里面存储的是结构的键值对(数据之间有非常强的关联关系) 键值对:用来表示一 一对应的关系,key代表键值,value代表与key对应的信息 如:中英文互译字典...,内部的英文必然有一个中文对应 ---- map与set 底层是二叉搜索树 ---- set作为key模型 map作为 key_value模型 不懂的可以点击了解:二叉搜索树的应用场景 2. set set...底层是二叉搜索树,所以重复的值在树中插入会失败 相当于完成了去重操作 ---- 不能随便修改*it的数据,set底层作为二叉搜索树,若将其中一个key值进行修改,就没办法保证修改后是不是搜索树了 --...-- 支持迭代器就是支持范围for,范围for底层就是迭代器 count 给一个值,判断在不在 若在返回非0,若不在返回0 但是由于set不支持重复的key值插入,所以count只能判断在不在 count

9920

C++:map和set的使用

3.1 set的介绍 set的文档介绍 翻译: 1. set是按照一定次序存储元素的关联性容器 2....2. set中插入元素时,只需要插入value即可,不需要构造键值对。 3. set中的元素不可以重复(因此可以使用set进行去重)。 4....使用set的迭代器遍历set中的元素,可以得到有序序列 5. set中的元素默认按照小于来比较(可以通过仿函数去改变) 6. set中查找某个元素,时间复杂度为:log2n 小小总结一下重点:set...与set的区别是,multiset中的元素可以重复,set中value是唯一的 4....但是c++中提供了一个make_pair的接口 本质上也是去调用这个匿名构造,但是我们的代码可以更加简洁。 他可以帮助我们自动识别类型。

8910

c++set和map的使用

set中插入元素时,只需要插入value即可,不需要构造键值对。 set中的元素不可以重复(因此可以使用set进行去重)。...使用set的迭代器遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改 set中的底层使用二叉搜索树(红黑树...(3):删除set中[first, last)区间中的元素 交换set中的元素 将set中的元素清空 返回set中值为x的元素的位置 返回set中值为x的元素的个数 在C++中,...如果给定值不存在于set中,它们不会向 set 添加元素。...这意味着,当你执行操作例如 equal_range 时,可能会返回一个元素的范围,而不是单个元素 equal_range 是 C++ 标准模板库(STL)中关联容器(例如 set、multiset、

3800

C++set 和 map 学习及使用】

x, T2 y) { return ( pair(x,y) ); } 该函数实际会被编译器优化为 内联函数,因此不会造成过多消耗,可以放心使用 1.3、树型结构的关联式容器 所以在 C+...什么是 set?...中序遍历,同时 set 的迭代器还是一个 双向迭代器,支持 ++ 和 -- 操作 下面来看看 set 的相关操作 2.2、set 的使用 set 的构造函数如下图所示: 可以直接创建一个空...set 使用,也可以根据迭代器区间创建 set 注意: 创建时需要指定实值的类型 #include #include #include using...求差集的步骤如下: 先将两个数组 排序 + 去重 遍历两个数组 如果相等,同时 ++ 不相等,小的一方记录后,再 ++ 其中一方走完,再遍历另一方,此时其中的所有元素都是差集 ---- 总结 以上就是本次关于 C+

24220

c++】map和set的模拟实现

不断完善红黑树功能,最后封装模拟实现 目录 1.红黑树的改造 由insert更改模版参数 set和map的insert函数: 2.红黑树的迭代器 ++的实现: set迭代器: map迭代器 find...: 库的实现取决于第二个模版参数value,这里与前面不一样,这里第二个传参如果是pair,意味着是map类型,传参是key,意味着是set类型 set构架: namespace myown {...template class set { private: RBTree _t; }; } map构架: namespace myown { template...,_data就是K,对于map,_data就是pair 用红黑树实现set和map,又要存储K,又要存储pair,通过上面实现,set插入K,map插入pair,用第二个模版参数T 这里的第一个模版参数并不多余...; s.insert(5); s.insert(7); set::iterator it = s.begin(); while (it !

4800

C++set的用法学习

SetC++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。...SetC++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。Set是一种基于红黑树实现的关联容器,也就是说它的元素按照固定的顺序排列,且每个元素都唯一。...Set中包含的元素是自动排序的,因此,如果你需要在存储值的同时能够高效的进行查找,那么Set会是一个很好的选择。创建Set对象为了使用Set对象,首先必须包含头文件。...下面是创建一个Set对象的语法:std::set my_set其中,DataType表示元素的数据类型,而my_set则是创建的Set对象名称。...C++ Set还提供了其他的常见操作,例如:find():查找Set中是否包含指定元素并返回该元素的迭代器,若没有找到则返回end()。size():返回Set中元素的个数。

25500
领券