首页
学习
活动
专区
圈层
工具
发布

【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 中存放元素的类型,实际在底层存储 的键值对。

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

    【C++】map和set

    set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。 set在底层是用二叉搜索树(红黑树)实现的。...set中插入元素时,只需要插入value即可,不需要构造键值对。 set中的元素不可以重复(因此可以使用set进行去重)。...使用set的迭代器遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改(为什么?)...set中的底层使用二叉搜索树(红黑树)来实现. 3.1 set的模板参数列表 set的模板参数列表 T: set中存放元素的类型,实际在底层存储的键值对。...(); return 0; } 发现set不仅仅排序,还去重: 3.3 set的迭代器 3.4 set的容量 3.5 set修改操作 erase测试一下: set s3= { 3,2,8,1,10,2

    28310

    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出现过了。

    3.5K10

    C++之map和set

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

    91630

    C++ —— set系列的使用

    顺序容器中的元素是按关键字来保存和访问的 关联式容器有map/set系列unordered_map/unordered_set(哈希表)系列 map和set底层是红⿊树,红⿊树是⼀颗平衡...set是key搜索场景的结构,map是key/value搜索场景的结构 2. set和multiset参考⽂档 - C++ Reference https://legacy.cplusplus.com.../reference/set/ 3. set类的介绍 1. set的声明如下,T就是set底层关键字的类型,set是去重的 2. set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求...// set::key_compare/value_compare class Alloc = allocator // set::allocator_type > class...set; 4. set的构造和迭代器 set的⽀持正向和反向迭代遍历,遍历默认按升序顺序,因为底层是⼆叉搜索树,迭代器遍历⾛的中序;⽀持迭代器就意味着⽀持范围for set的iterator

    22700

    【c++】set和map的封装

    这次带来的是C++中关于set和map封装这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙 一、框架搭建( 如何实现红黑树的复用?)...set和map的底层都是红黑树,但由于存储元素的差异(一个只存储key,一个既存储key又存储value),我们要么创造出两棵稍微不一样的红黑树,或者是改变红黑树的结构,使其能完美匹配上set和map。...set传过来的是Key类型,map传过来的是pair类型。利用模板来控制红黑树所存储的类型,满足set和map不同的存储需求。...分析第三个模板参数KeyofValue 我们在进行插入时,需要根据key的大小来找到插入的位置,而由于set和map存储类型的不同,set直接用Value(key)类型的元素就好,而map则需要取出Value...map和set的迭代器是双向迭代器,关键是需要实现++和–的重载。 1.

    10410

    【C++】map和set的使用

    唯一性:set和map要求键唯一;multiset和multimap允许重复键。 常见容器 set:存储唯一键的有序集合。 map:存储键值对的有序映射。...2. set系列的使用 2.1 set和multiset的参考文档 点击快速到达 2.2 set类的介绍 set的声明如下,T就是set底层关键字的类型。...set默认要求T支持小于比较,如果不支持,可以手动实现一个仿函数传给第二个模板参数。 set底层存储数据的内存是从空间配置器上申请的,如果需要可以自己手动实现一个内存池,传给第三个参数。...> class set; 2.3 set的构造函数和迭代器 set的构造我们只需关注一下几个即可 //empty (1) 无参默认构造 explicit set(const key_compare...有所不同,但是查和删的接口只用关键字Key,跟set完全相似。

    27910

    【C++】map和set的封装

    1. map和set不同的模板参数 在源码中看看map和set: 当单看,红色部分时候发现两个都一样: 但是这两个是不一样的: map的key_type和value_type不一样,value_type...在插入中首先要比较data,但是并不知道比较的是不是key,所以就得先找到key,就用一个内部类来解决,如果是map就比较pair的first,如果是set就比较key。...set传了一个SetKeyOfT下来,此时就知道这个T就是一个key,下层的RBTree不知道,但是上层的set知道。...所以set的K和第二个模板参数传给下面的T的key 而下面的KeyOfT是一个仿函数,这里的kot就可以调用operate()。...他是set的KeyOfT对象,此时调用operate(),就调用到set的operator(): 为什么不直接比较? 是因为和map用到的是同一套模板。map是这样,那么set也得这样。

    17910

    【C++】map和set的使用

    Set容器 ✈️认识Set set是按照一定次序存储元素的容器 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。...使用set的迭代器遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为:logN set中的元素不允许修改(为什么?)...set中的底层使用二叉搜索树(红黑树)来实现 Set的详细文档介绍:Set使用介绍。...string", "字符串"}; dict.insert(kv); // C++11支持,构造函数支持多参数隐式类型转换 dict.insert({ "apple", "苹果" }); // C+...string", "字符串"}; dict.insert(kv); // C++11支持,构造函数支持多参数隐式类型转换 dict.insert({ "apple", "苹果" }); // C+

    38410

    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的接口 本质上也是去调用这个匿名构造,但是我们的代码可以更加简洁。 他可以帮助我们自动识别类型。

    34410

    【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、

    81400

    【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的迭代器是红黑树内部的迭代器

    30130
    领券