STL补充--set集合相等判断
一:问题引出
#include <iostream>
#include <map>
#include <set> using namespace std; map<Set, int> MapTest; int main()
{
set<int> s1;
set<int> s2 = set<int>(); //这里我们分别建立了两个集合对象
MapTest[s1] = ;
cout << MapTest.count(s2) << endl;
if (s1 == s2)
cout << "" << endl; s1.insert();
cout << MapTest.count(s2) << endl;
if (s1 == s2)
cout << "" << endl; system("pause");
return ;
}
(一)建立了两个集合对象(不是一个)
set<int> s1;
set<int> s2 = set<int>(); //这里我们分别建立了两个集合对象

(二)将集合s1放入map中(并未将s2放入map)
MapTest[s1] = 1;
cout << MapTest.count(s2) << endl;

可以发现我们查找s2时在map中会找到,并且个数为1-->即s1。将s1和s2当做一个集合进行查找
(三)我们直接比较s1和s2(发现结果确实是两种相等)
if (s1 == s2)
cout << "666" << endl;

(四)我们单独修改s1,之后使用==与s2比较(发现两种不同)
s1.insert(12);
if (s1 == s2) //不会进入
cout << "666" << endl; //不会进入
二:源码分析(符号重载)
(一).集合继承于_Tree
class set : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false> >
(二)._Tree对==进行了重载,比较方式如下
// _Tree TEMPLATE OPERATORS
template<class _Traits> inline
bool operator==(const _Tree<_Traits>& _Left, const _Tree<_Traits>& _Right)
{ // test for _Tree equality
return (_Left.size() == _Right.size()
&& equal(_Left.begin(), _Left.end(), _Right.begin())); //3.对两个树进行比较,从开始到结束,若是元素一致相等,则判定这两个树为相等
}
三:map补充
int main()
{
set<int> s1;
set<int> s2 = set<int>(); //这里我们分别建立了两个集合对象
MapTest[s1] = ;
cout << MapTest.count(s2) << endl;
if (s1 == s2)
cout << "" << endl; s1.insert();
cout << MapTest.count(s2) << endl;
if (s1 == s2)
cout << "" << endl; system("pause");
return ;
}
我们会发现这里还是会输出1,因为map中插入s1时是进行了拷贝插入,不是引用。
所以map中存在的那个集合并不是s1,而是原来那个空集合的拷贝对象。
当s1修改时不会影响到map中的那个集合元素,因此我们使用map查找s2时还是会找到。原因如一二分析

STL补充--set集合相等判断的更多相关文章
- 有一个集合,判断集合里有没有“world”这个元素,如果有,添加“javaee”
// 有一个集合,判断集合里有没有“world”这个元素,如果有,添加“javaee” List list = new ArrayList(); list.add("world") ...
- 3.python基础补充(集合,collection系列,深浅拷贝)
一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复 ...
- day8数据类型补充,集合,深浅拷贝
思维导图: 集合的补充:下面的思维导图有一个点搞错了,在这里纠正一下,没有合集,是反交集,^这个是反差集的意思 . 交集&,反交集^,差集-,并集|,然后就是子集和超集 数据类型补充: ''' ...
- 集合如何判断null
转http://blog.csdn.net/baple/article/details/8604585 java判断list为空 分类: JAVA 2013-02-23 08:47 18368人阅读 ...
- python之数据类型补充、集合、深浅copy
一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...
- Python_数据类型的补充、集合set、深浅copy
1.数据类型的补充 1.1 元组 当元组里面只有一个元素且没有逗号时,则该数据的数据类型与括号里面的元素相同. tu1 = ('laonanhai') tu2 = ('laonanhai') prin ...
- python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy
1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...
- python day 07-数据类型补充,集合,深浅拷贝
一.基础数据类型补充 1.列表转字符串 a='A'.join(['c','c','s']) print(a) 2.循环删除列表中的每⼀一个元素 lst=['asdf','dftgst','zsdrfs ...
- 基本数据类型补充 set集合 深浅拷贝
一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲'] s = "_&q ...
随机推荐
- 《你们都是魔鬼吗》第八次团队作业 第二天Alpha
<你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...
- 《发际线总是和我作队》第九次作业:Beta冲刺Scrum Meeting3
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目冲刺 团队名称 发际线总和我作队 作业学习目标 (1)掌握软件黑盒测试技术:(2)掌握软件 ...
- Follow My Heart
看到这个题目,能够让我不断跟随自己的心去奋斗,当然在这之中也有过彷徨,有过偷懒,但最终还是依然坚强,依然保持着一种积极向上的心情去迎接每一天. 这一年从大三升到大四,瞬间觉得自己成长了很多,身上的责任 ...
- keras模块学习之model层【重点学习】
本笔记由博客园-圆柱模板 博主整理笔记发布,转载需注明,谢谢合作! model层是keras模块最重要的一个层,所以单独做下笔记,这块比较难理解,本博主自己还在学习这块,还在迷糊中. model的方法 ...
- GITHUB下载源码
从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄.然而,今天终于成功了,激动地我赶紧来记录一下. 如何从G ...
- 大小端示例-arm c51
大小端系列文章https://blog.csdn.net/liming0931/article/details/100016425 MDK(Keil5,STM32F407)C语言: #include ...
- 浮点数转成字符串函数gcvt()
头文件:#include <stdlib.h> 这三个函数都是将数字转化为字符串,简单区别如下: 1.gcvt()所转换后的字符串包含小数点或正负符号 2.ecvt()的转换结果中不包括十 ...
- (转载) 搭建非域AlwaysOn win2016+SQL2016
非域搭建Alwayson只是省去搭建域控那一部分,其他大同小异 条件: 操作系统:windows server 2016 数据库:SQL Server 2016 SSMS版本:17.3 节点1:HDD ...
- 2019/8/27 Test(luogu 五月天模拟赛)
\(2019/8/27\)大考 \(\color{#ff0808}{\text{初二诀别赛(SAD)}}\) 题目名称 链接 寿司 \(BSOJ5111\) 秀秀的森林 \(BSOJ5125\) 分组 ...
- 特别的表格(overflow:hidden的一个小应用)
做多个li,对各个边的边框有不同的要求,三层盒子,第一层盒子放li,设置右边和下边的虚线边框,浮动,第二层盒子ul设置宽度使li排列,第三层盒子最大的盒子,使用overflow:hidden,宽度高度 ...