一:问题引出

#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时还是会找到。原因如一二分析

最新文章

  1. MVC中处理表单提交的方式(使用html扩展方法+juqery插件)
  2. 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service
  3. pdo的工作方式与查错
  4. SQL常见的可优化点
  5. kickstart bonding安装
  6. dagli最早干了这样一件事儿 Localization of Cardiac-Induced Signal Change in fMRI
  7. (转)《深入理解java虚拟机》学习笔记1——Java内存结构
  8. linux groupmems命令
  9. [转] hibernate和ibatis的对比
  10. 给Pomelo的聊天室添加time的RPC调用
  11. 基于ssm的poi反射bean实例
  12. asp.net core 2.2 中的过滤器/筛选器(上)
  13. Oracle集群(RAC)时间同步(ntp和CTSS)
  14. Java开发人员必须掌握的两个Linux魔法工具(四)
  15. word中替换【换行符】与【回车符】
  16. AnswerOpenCV一周佳作欣赏(0615-0622)
  17. Mybatis的自动映射autoMappingBehavior与mapUnderscoreToCamelCase
  18. jqgrid editrules参数说明
  19. IIS应用程序池相关问题及连接池已满的解决方法
  20. 教育单元测试mock框架优化之路(上)

热门文章

  1. 《你说对就队》第七次作业:团队项目设计完善&amp;编码
  2. SVM:从数学上分析为什么优化cost function会产生大距离(margin)分类器
  3. Zookeeper中的watcher监听和leader选举机制
  4. arm 环境下安装selenium+chrome
  5. golang 无缓冲channel
  6. 《挑战30天C++入门极限》图文例解C++类的多重继承与虚拟继承
  7. StarUML自动生成Java代码
  8. EM算法 学习笔记
  9. LeetCode 第 155 场周赛
  10. 深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战