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

C++STL-set详解

目录 set/ multiset容器 1. set基本概念 2.set构造和赋值 3.set大小和交换 4.set插入和删除 5.set容器-查找和统计 6.set和multiset区别 7.pair...set和multiset区别:  set不允许容器中有重复元素. multiset允许容器中有重复元素 2.set构造和赋值 代码 #include using namespace...插入和删除 功能描述 set容器进行插入数据和删除数据 函数原型 insert (elem);                //在容器插入元素 clear ( );                       ...容器-查找和统计 功能描述 对set容器进行查找数据以及统计数据 函数原型 find(key);      //查找key是否存在,若存在,返回该键元素迭代器;若不存在,返set.end();...和multiset区别 学习目标 掌握set和multiset区别 区别 set不可以插入重复数据,而multiset可以 set插入数据同时会返回插入结果,表示插入是否成功.

37120

C++ STLset基本操作

set是集合,虽然也存在键值和实值,不过两者根本就是同一个值,键值设置完全就是为了满足红黑树底层结构,set操作与map很像不过也有些不同。...1、 set迭代器与map不同: (1)set使用接引用运算符*取值,而map使用first和second取值。...(2)set迭代器都是常量迭代器,不能用来修改所指向元素,而map迭代器是可以修改所指向元素。...2、set没有重载[]运算符,而map重载了,因为直接使用[]改变元素值会打乱原本正确顺序,要改变元素值必须先删除旧元素,则插入新元素 3、构造类型不一样,如同样实值为int类型分别为set<int...); 29 print(set_int); 30 31 //元素删除 32 //1,size_type erase(value) 移除set容器内元素值为value所有元素,返回移除元素个数

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

C++】 使用红黑树模拟实现STLmap与set

前言 前面的文章我们学习了红黑树,也提到了C++STLmap和set底层其实就是用红黑树来实现(而map和set使用我们前面也学过了)。...既然红黑树我们也学习过了,那这篇文章我们就用红黑树来简单实现一下STLmap和set,重点是学习它框架。 1....STL源码map和set实现 那在正式实现之前,我们先一起来看一下STL(SGI版本)map和set源码,大致了解一下库里面是怎么实现。...那大家想一下,begin返回是啥? ,在这里是不是应该返回指向序遍历第一个结点迭代器啊。 而序遍历第一个结点不就是整棵树最左边那个结点嘛。 那就是这样 那end呢?...首先++重载 大家想一下,最开始迭代器it在1这个结点位置(它是序遍历第一个嘛),那怎么样让它++就能走到下一个序遍历结点上呢?

13010

C++(STL):26 ---关联式容器set用法

但是,C++ 标准为了防止用户修改容器中元素值,对所有可能会实现此操作行为做了限制,使得在正常情况下,用户是无法做到修改 set 容器中元素。...创建C++ set容器几种方法 常见创建 set 容器方法,大致有以下 5 种。 1) 调用默认构造函数,创建空 set 容器。...由于其采用默认 std::less 规则,因此其内部存储 string 元素顺序如下所示: "hello world" "C++" "nodejs" 3) set 类模板还提供了拷贝(复制...另外,C++ 11 标准还为 set 类模板新增了移动构造函数,其功能是实现创建新 set 容器同时,利用临时 set 容器为其初始化。...> 降序规则,myset 容器中元素存储顺序为: "php" "nodejs" "c++" C++ STL set容器包含成员方法 表 1 列出了 set 容器提供常用成员方法以及各自功能。

54910

Andy‘s First Dictionary C++ STL set应用

简单来说:输入一个文本,找出所有不同单词(连续字母序列)按照字典序从小到大输出。单词不区分大小写。...fork going home in left read road sign so the they to two went were when 思路分析 主要是通过set...自动排序来完成,当然我们首先得把单词分离出来再装进set里面。...之类也是会包含在字符串,因此我们需要转变一下这些字符串,判断单个字符串单个字符是不是字母,不是就把它变成空格,是就把它变成小写字母,因为输入是全小写,那为什么要变成空格呢,因为可以通过stringstream...set自己会完成集合工作,不会有重复元素,会自动升序排序,最后输入元素时候,我们只需要通过迭代器来输入就可以了。

11520

C++ STL容器之set容器快速入门

set定义 set name; 其中type可为任何基本类型(如int等)、结构体和STL标准容器。...注意:(1)若type也是STL容器(STL容器嵌套),则需要在>>后加上空格(C++11之前标准编译会将其视为移位操作)。即set> name;。...此时可把vector理解成两个维度都可变二维数组理解。 set数组定义 set st[100]; 这样st[0]到st[100]每一个set都是一个set容器。...C++11标准还有unordered_set,以散列替代set内部红黑树,使其可以用来处理只去重不排序需求,速度比set快得多。...版权所有:可定博客 © WNAG.COM.CN 本文标题:《C++ STL容器之set容器快速入门》 本文链接:https://wnag.com.cn/279.html 特别声明:除特别标注,本站文章均为原创

1.5K20

C++STLset使用策略(一)

setSTL中一种标准关联容器。它底层使用平衡搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。        ...),对称差(set_symmetric_difference) 等一些集合上操作,如果需要集合元素允许重复那么可以使用multiset。...二分查找——q.lower_bound(x); set模板原型 template , class Alloc=STL_DEFAULT_ALLOCATOR.../*2.删除*/ //s.erase(); 删除一个元素 //s.clear(); 删除set容器所有的元素 #include  #include  using namespace...,分别表示 第一个大于或等于给定关键值元素 和 第一个大于给定关键值元素,这个返回值是一个pair类型,如果这一对定位器哪个返回失败,就会等于s.end() #include

79630

C++STLset使用策略(二)

下面来看一道PAT上题——列车调度(L2—014)        用set完美解决 #include  using namespace std; int main...() {     int i,j,k,n,x;     set s;//定义一个名为s集合     while(cin>>n)     {         for(int i = 0;i ::iterator it;//定义一个set迭代器                 it = s.lower_bound(x);//进行二分查找                 if(it...        cout<<t<<endl;     }     return 0; }        再看一道题——蒜头君随机数        蒜头君想在学校请一些同学一起做一项问卷调查,为了确保实验客观性...会用set就非常方便 #include  using namespace std;   int main() {        set q;        int

55530

C++(STL):27 ---关联式容器set源码剖析

一、set set语法使用参阅: set特性 set所有元素都会根据元素键值自动被排序 set键值就是实值,实值就是键值 默认情况下set不允许两个元素重复 set迭代器 不能根据set迭代器改变...(当然,被删除那个元素迭代器无效) 相关算法 STL提供了一组set/multiset相关算法,包括交集(set_intersection)、联集(set_union)、差集(set_difference...)、对称差集(set_symmetric_difference) 详情会在后面的“算法”文章中介绍 set底层结构 由于RB-tree是一种平衡二叉搜索树,自动排序效果很不错,所以标准STL set...(const set&, const set&); #endif /* __STL_TEMPLATE_FRIENDS */ }; set使用案例 #include #include...内置find函数,比STL算法高效 ite1 = iset.find(1); if (ite1 !

62520

C++STLmap用法详解

,也是STL特性,删除区间是一个前闭后开集合 //自个加上遍历代码,打印输出吧 } 10、mapswap用法mapswap不是一个容器元素交换,而是两个容器所有元素交换...11、排序 ·  mapsort问题map元素是自动按Key升序排序,所以不能对map用sort函数;这里要讲的是一点比较高深用法了,排序问题,STL默认是采用小于号来排序,以上代码在排序上是不存在任何问题...是一个统一整体,map很多用法都和STL其它东西结合在一起,比如在排序上,这里默认用是小于号,即less,如果要从大到小排序呢,这里涉及到东西很多,在此无法一一加以说明。...还要说明是,map由于它内部有序,由红黑树保证,因此很多函数执行时间复杂度都是log2N,如果用map函数可以实现功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些...(标示红黑,相当于平衡二叉树平衡因子),我想大家应该知道,这些地方 很费内存了吧,不说了……12、   map基本操作函数:     C++ maps是一种关联式容器,包含“关键字/值”对 begin

2.6K20

C++ STL学习之容器set和multiset (补充材料)

一、set和multiset基础 set和multiset会根据特定排序准则,自动将元素进行排序。不同是后者允许元素重复而前者不允许。...二、set和multiset功能 和所有关联式容器类似,通常使用平衡二叉树完成。事实上,set和multiset通常以红黑树实作而成。...(2); 60 set.insert(5); 61 } 运行结果: 虽然set1和set2而比较准则本身不同,但是型别相同,所以可以进行赋值操作。...当插入元素在set已经包含有同样值元素时,插入就会失败。所以set返回值型别是由pair组织起来两个值: 第一个元素返回新元素位置,或返回现存同值元素位置。...set第二个insert函数,如果插入失败,就只返回重复元素位置! 但是,所有拥有位置提示参数插入函数返回值型别是相同。这样就确保了至少有了一个通用型插入函数,在各种容器中有共通接口。

1.1K80

C++】使用哈希表模拟实现STLunordered_set和unordered_map

前言 前面的文章我们学习了unordered_set和unordered_map使用以及哈希表,并且我们提到了unordered_set和unordered_map底层结构其实就是哈希表。...所以这里有些地方我们就不会特别清楚去说明了,如果某些地方大家看不能太明白,建议先搞懂这篇文章——使用红黑树模拟实现STLmap与set 这里面我们是讲比较清楚。...当插入成功时候,pairfirst为指向新插入元素迭代器,second为true,当插入失败时候(其实就是插入键已经存在了),那它first为容器已存在那个相同等效键元素迭代器,second...,随意改散列就出问题了: 那我们来处理一下: 那其实解决方法和set那里是一样,库里面也是一样方法,让unordered_set迭代器都是哈希表const迭代器。...; ++i) { if (__stl_prime_list[i] > prime) return __stl_prime_list[i]; } return __stl_prime_list

10910

C++STL 容器 - set 集合容器 ① ( set 集合容器简介 | set 集合容器操作时间复杂度 | set 集合容器常用操作 )

一、set 集合容器 1、set 集合容器简介 C++ 语言中 STL 容器 set 容器 , 是 " 集合容器 " , 容器 每个元素 是 " 唯一 " , 并且 集合容器 元素 是按照一定顺序进行排列...; 向 set 集合容器 插入元素时 , 都会先验证集合是否已经存在该元素 , 然后再根据排序规则 , 插入到指定位置 ; set 集合容器 不支持 将 元素插入到指定位置 ; set 集合容器...set 元素只能出现一次 , multiset 元素可以出现多次 ; set 集合容器 元素 不能直接修改 , 只能 先删除 原来元素 , 然后插入新元素 ; 2、set 集合容器操作时间复杂度...上述时间复杂度 n 指的是 红黑树 元素节点个数 ; 与 红黑树 进行对比 , 线性表 如果进行 插入 / 删除 操作 , 其时间复杂度是 O(n) , 显然 红黑树 / set 集合容器... 插入 / 删除 操作 性能更高 ; 3、set 集合容器常用操作 set 集合容器常用操作 : 插入元素 : 调用 insert 函数 可以向 set 集合容器插入元素 , 如果元素已存在 ,

16510

C++set用法详解

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

72210

C++STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C++ 语言 STL 标准模板库 , std::set 集合容器 是一个存储唯一元素容器 , 该容器底层使用 红黑树...数据结构 实现 ; std::set 容器是有序 , 存储元素时 会自动按指定规则进行排序 ; std::set 集合容器类 提供了一个 find 成员函数 , 用于查找 集合容器 指定值元素...二、获取元素个数 - set#count 函数 1、函数原型 简介 std::set 集合容器 每个元素都是唯一 , 对于任何元素 , 它 在集合要么存在 , 要么不存在 , 这意味着其计数只能是...0 或 1 ; 在 std::multiset 集合容器 , 统计元素个数是有意义 ; std::set 集合容器类 提供了一个 count 成员函数 , 用于确定集合特定元素数量 ; 对于...无符号整数类型 , 表示指定元素 k 数量 ; 如果 set 容器 存在该值 , 返回 1 ; 如果 set 容器 不存在该值 , 返回 0 ; 2、代码示例 - set#find 函数

29110

C++set用法学习

SetC++ STL(标准模板库)一个容器类,它用于存储不同值,并且可以按照特定顺序进行访问和操作。...SetC++ STL(标准模板库)一个容器类,它用于存储不同值,并且可以按照特定顺序进行访问和操作。Set是一种基于红黑树实现关联容器,也就是说它元素按照固定顺序排列,且每个元素都唯一。...在添加元素同时,也会保证集合元素不重复,就是说如果在Set已经包含了该元素,那么新加入数据将不会被插入到Set。...C++ Set还提供了其他常见操作,例如:find():查找Set是否包含指定元素并返回该元素迭代器,若没有找到则返回end()。size():返回Set中元素个数。...is 3Set提供操作使其成为了STL中非常有用容器之一。

19800

C++map和set使用

(图片来源于网络) 一、set 1.1 set特点介绍 set介绍 C++set是一个STL容器,它是一个自动排序集合(即将数据存入set,我们通过迭代器顺序访问出来时,数据是有序),内部使用红黑树...数据唯一(可以用于去重):每个value必须是唯一set元素不能在容器修改(元素总是const),但是可以从容器插入或删除它们。 set在底层是用二叉搜索树(红黑树)实现。...是否为空,空返回true,否则返回false size() 获取set中有效数据个数 (2)Modifiers(修改) 接口名 解释 insert 向set插入数据,可以是迭代器区间们也可以是单个值...erase 删除指定位置数据(可以提供迭代器,也可以是元素值) void swap (set& x); 交换两个set void clear(); 清除set数据 (3)查找 接口名 解释 iterator...:2 [ ]作用 在 C++ ,map [] 运算符可以用于访问和修改 map 元素,其作用如下: 若键值存在,返回对应值; 若键值不存在,会与这个不存在key和默认值构成一个键值对

16210
领券