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 ...
随机推荐
- Intellij IDEA – How to build project automatically
By default, Intellij IDEA doesn’t compile classes automatically. But, you can enable the auto compil ...
- LSTM神经网络输入输出究竟是怎样的?
LSTM图和词向量输入分析
- Django admin中文报错Incorrect string value 解决办法
- Python3学习(一)
基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入内容.#idle中按F5可以运行代 ...
- 018_Python3 模块
在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...
- 卡林巴琴谱&简谱
---------------------------------------------------------------------------------------------------- ...
- 洛谷P1706全排列问题
P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组 ...
- LOJ2719. 「NOI2018」冒泡排序 [组合计数]
LOJ 思路 这题我看着题解还搞了几个小时?我也不知道自己在干啥-- 首先你要通过出色的分析能力得到一个结论:一个排列合法当且仅当它的最长下降子序列长度不超过2. 证明?懒得写了. 然后我们不管字典序 ...
- nodejs新工具-cypress和testcofe的崛起
今天咨询一个自动化 工具问题,偶然间有人提起了这个可能以后会很火的工具,在此找到一篇很好的参考文章 记录并为以后做准备 cypress和testcofe https://www.jianshu.com ...
- content="IE=Edge"是什么意思?
永远以最新的IE版本模式来显示网页 <meta http-equiv="X-UA-Compatible" content="IE=7">#以上代码告 ...