目录 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插入数据的同时会返回插入结果,表示插入是否成功.
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的所有元素,返回移除的元素个数
输入格式 第1行2个正整数n和m,表示学生数和题库中的题目总量。 第2~n+1行,先是1个正整数p,然后p个整数表示第i个学生的做题记录(可以重复做同一道题)。...简单来说,就是,训练的题要求每个学生都做过,考试的题要求每个学生都没做过。 注意到重复问题,那么用set来解决就十分好,因为重复的元素它不收。...创建两个set数组,一个存学生做过的题目,另一个存题库的题。 首先对于题库,依次给他们负上值,即题目序号。...代码 #include #include using namespace std; int main() { int n, m, p, k, tpye, q, i, j,...>> temp; done[i].insert(temp); } } cin >> k; set test[k]; for (i = 0; i < k; i++) for
前言 前面的文章我们学习了红黑树,也提到了C++STL中的map和set的底层其实就是用的红黑树来实现的(而map和set的使用我们前面也学过了)。...既然红黑树我们也学习过了,那这篇文章我们就用红黑树来简单实现一下STL中的map和set,重点是学习它的框架。 1....STL源码中map和set的实现 那在正式实现之前,我们先一起来看一下STL(SGI版本)中map和set的源码,大致了解一下库里面是怎么实现的。...那大家想一下,begin返回的是啥? ,在这里是不是应该返回指向中序遍历第一个结点的迭代器啊。 而中序遍历的第一个结点不就是整棵树最左边的那个结点嘛。 那就是这样 那end呢?...首先++的重载 大家想一下,最开始迭代器it在1这个结点的位置(它是中序遍历第一个嘛),那怎么样让它++就能走到下一个中序遍历的结点上呢?
但是,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 容器提供的常用成员方法以及各自的功能。
简单来说:输入一个文本,找出所有不同的单词(连续的字母序列)按照字典序从小到大输出。单词不区分大小写。...fork going home in left read road sign so the they to two went were when 思路分析 主要是通过set...的自动排序来完成,当然我们首先得把单词分离出来再装进set里面。...之类的也是会包含在字符串中,因此我们需要转变一下这些字符串,判断单个字符串中的单个字符是不是字母,不是就把它变成空格,是就把它变成小写字母,因为输入是全小写的,那为什么要变成空格呢,因为可以通过stringstream...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 特别声明:除特别标注,本站文章均为原创
set的英文意思是“集合”, 集合都不陌生吧,集合的特点有唯一性,即:每一个元素只有一个,所以set可以用来“去重”操作,set还有默认的排序。 ...1、头文件—— 2、定义——setQ; 3、输入(插入)——insert(x); 4、有序输出 set::iterator it; for(it = Q.begin...列车调度 Pat上的一个题目,用set完美的解决了。...::iterator it;//定义一个set型的迭代器 19 it=s.lower_bound(x);//进行二分查找 20...s.insert(x);//插入一个元素x 28 } 29 } 30 } 31 int t=s.size();//集合s的大小
set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。 ...),对称差(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
下面来看一道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
一、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 !
,也是STL的特性,删除区间是一个前闭后开的集合 //自个加上遍历代码,打印输出吧 } 10、map中的swap用法map中的swap不是一个容器中的元素交换,而是两个容器所有元素的交换...11、排序 · map中的sort问题map中的元素是自动按Key升序排序,所以不能对map用sort函数;这里要讲的是一点比较高深的用法了,排序问题,STL中默认是采用小于号来排序的,以上代码在排序上是不存在任何问题的...是一个统一的整体,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,即less,如果要从大到小排序呢,这里涉及到的东西很多,在此无法一一加以说明。...还要说明的是,map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N的,如果用map函数可以实现的功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些...(标示红黑的,相当于平衡二叉树中的平衡因子),我想大家应该知道,这些地方 很费内存了吧,不说了……12、 map的基本操作函数: C++ maps是一种关联式容器,包含“关键字/值”对 begin
一、set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。...二、set和multiset的功能 和所有关联式容器类似,通常使用平衡二叉树完成。事实上,set和multiset通常以红黑树实作而成。...(2); 60 set.insert(5); 61 } 运行结果: 虽然set1和set2的而比较准则本身不同,但是型别相同,所以可以进行赋值操作。...当插入的元素在set中已经包含有同样值的元素时,插入就会失败。所以set的返回值型别是由pair组织起来的两个值: 第一个元素返回新元素的位置,或返回现存的同值元素的位置。...set的第二个insert函数,如果插入失败,就只返回重复元素的位置! 但是,所有拥有位置提示参数的插入函数的返回值型别是相同的。这样就确保了至少有了一个通用型的插入函数,在各种容器中有共通接口。
前言 前面的文章我们学习了unordered_set和unordered_map的使用以及哈希表,并且我们提到了unordered_set和unordered_map的底层结构其实就是哈希表。...所以这里有些地方我们就不会特别清楚的去说明了,如果某些地方大家看的不能太明白,建议先搞懂这篇文章——使用红黑树模拟实现STL中的map与set 这里面我们是讲的比较清楚的。...当插入成功的时候,pair的first为指向新插入元素的迭代器,second为true,当插入失败的时候(其实就是插入的键已经存在了),那它的first为容器中已存在的那个相同的等效键元素的迭代器,second...,随意改散列就出问题了: 那我们来处理一下: 那其实解决方法和set那里是一样的,库里面也是一样的方法,让unordered_set的迭代器都是哈希表的const迭代器。...; ++i) { if (__stl_prime_list[i] > prime) return __stl_prime_list[i]; } return __stl_prime_list
一、set 集合容器 1、set 集合容器简介 C++ 语言中的 STL 容器中的 set 容器 , 是 " 集合容器 " , 容器中的 每个元素 是 " 唯一的 " , 并且 集合容器 中的元素 是按照一定的顺序进行排列的...; 向 set 集合容器 中 插入元素时 , 都会先验证集合中是否已经存在该元素 , 然后再根据排序规则 , 插入到指定的位置 ; set 集合容器 不支持 将 元素插入到指定位置 ; set 集合容器...set 中的元素只能出现一次 , multiset 中的元素可以出现多次 ; set 集合容器 中的元素 不能直接修改 , 只能 先删除 原来的元素 , 然后插入新元素 ; 2、set 集合容器操作的时间复杂度...上述时间复杂度中的 n 指的是 红黑树中 的 元素节点个数 ; 与 红黑树 进行对比 , 线性表 中 如果进行 插入 / 删除 操作 , 其时间复杂度是 O(n) , 显然 红黑树 / set 集合容器...的 插入 / 删除 操作 性能更高 ; 3、set 集合容器常用操作 set 集合容器常用操作 : 插入元素 : 调用 insert 函数 可以向 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的插入删除效率比用其他序列容器高?
#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 函数
题解: 如果每次都排序一遍肯定会超时的,可以使用 STL 中自动排序的 Set ,因为是两个数,所以加上 pair 就可以。 如果是2,那就尾部选一个,然后删除掉。...加上 pair 排序就是先按第一个排,再按第二个,都是从小到大的顺序。 注意 set 的begin( ) 和 end( ) 。...正好复习一下 set 和 pair 使用。...#include using namespace std; int main() { int q,k,p; set >...一个客户可能访问多次;保证在任意时刻,队列中的优先级各不相同。 输出格式 对于 2 和 3 操作,一行一个整数表示 D,若查询无结果,则输出 0。
Set是C++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。...Set是C++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。Set是一种基于红黑树实现的关联容器,也就是说它的元素按照固定的顺序排列,且每个元素都唯一。...在添加元素的同时,也会保证集合中的元素不重复,就是说如果在Set中已经包含了该元素,那么新加入的数据将不会被插入到Set中。...C++ Set还提供了其他的常见操作,例如:find():查找Set中是否包含指定元素并返回该元素的迭代器,若没有找到则返回end()。size():返回Set中元素的个数。...is 3Set提供的操作使其成为了STL中非常有用的容器之一。
(图片来源于网络) 一、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和默认值构成一个键值对
领取专属 10元无门槛券
手把手带您无忧上云