STL补充--set集合相等判断
2024-08-22 08:07:15
一:问题引出
#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时还是会找到。原因如一二分析
最新文章
- MVC中处理表单提交的方式(使用html扩展方法+juqery插件)
- 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service
- pdo的工作方式与查错
- SQL常见的可优化点
- kickstart bonding安装
- dagli最早干了这样一件事儿 Localization of Cardiac-Induced Signal Change in fMRI
- (转)《深入理解java虚拟机》学习笔记1——Java内存结构
- linux groupmems命令
- [转] hibernate和ibatis的对比
- 给Pomelo的聊天室添加time的RPC调用
- 基于ssm的poi反射bean实例
- asp.net core 2.2 中的过滤器/筛选器(上)
- Oracle集群(RAC)时间同步(ntp和CTSS)
- Java开发人员必须掌握的两个Linux魔法工具(四)
- word中替换【换行符】与【回车符】
- AnswerOpenCV一周佳作欣赏(0615-0622)
- Mybatis的自动映射autoMappingBehavior与mapUnderscoreToCamelCase
- jqgrid editrules参数说明
- IIS应用程序池相关问题及连接池已满的解决方法
- 教育单元测试mock框架优化之路(上)
热门文章
- 《你说对就队》第七次作业:团队项目设计完善&;编码
- SVM:从数学上分析为什么优化cost function会产生大距离(margin)分类器
- Zookeeper中的watcher监听和leader选举机制
- arm 环境下安装selenium+chrome
- golang 无缓冲channel
- 《挑战30天C++入门极限》图文例解C++类的多重继承与虚拟继承
- StarUML自动生成Java代码
- EM算法 学习笔记
- LeetCode 第 155 场周赛
- 深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战