怎么理解容器
1、容器(container)可以看作是一个“容器”,为了方便理解,可以把它理解成一个“罐子”,这个罐子没有特定的大小,你有东西就可以放到对应的罐子里面去存储,或者你想要找什么东西也可以到相应的罐子中找出来。----- 上述两类操作其实就与container中的insert()函数(作用是在该容器中插入元素)和find() 函数(作用是从该容器中找到某一指定元素)类似。
注意把容器跟普通的数组进行区分哟。
2、容器主要分成两类,一类是顺序容器,一类是关联容器。顺序容器主要包括:vector(向量)、list(列表)和deque(队列),顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的;关联容器主要包括:set(集合)map(映射)、multimap(多重集合)、multiset(多重映射),关联容器中的元素是按关键字来保存和访问的。
Set
1、什么场景下可以用到Set?
假定我是一个猴子我在水果园捡水果,每种水果我只捡一个,捡到的水果都被我放到了罐子里,现在我想知道我的罐子里面有没有香蕉我该怎么办?
—— 选“罐子”请选Set牌Container!
2、Set是何方神圣?
猴子只需要做两件事情,第一:选set牌罐子;第二:给每个放到罐子里的水果都贴上一个名称标签,比如苹果,香蕉。其他的事情就可以交给set这个神奇的罐子了。
(1)Set里面每一个元素都有一个key值, set对元素的操作基于该key值——所以每个放到罐子里的水果都需要被贴上唯一的一个名称标签(也就是给每个水果一个key值),这样set才能“认出”每个水果对应是什么东西。注意,Key值是唯一的,也就是每种类型的水果只会有一个,罐子中不会出现都贴有苹果标签的两个及以上水果。
(2)Set可以基于key值通过自带的find()函数找到指定元素,还可以通过count()函数返回该指定元素在该Set 容器中的个数 —— 所以set罐子可以通过水果上的标签找到香蕉(find函数)和当前罐子中香蕉的数目(count函数),注意由于Key值唯一,所以数目只有1和0两种情况;
(3)Set可以通过insert()函数向set中添加新元素——又找到水果的猴子将名称标签(key值)贴到水果上后依然放到罐子(set)中存储。
(4)需要注意的是:这是一个神奇的罐子( set container),还有一些其他的特性,比如顺序排列等,详情可参考: 参考一
Map
1、什么场景下可以用到Map?
森林学校考试了,成绩单都放到了柜子里,来查成绩单的长颈鹿白兔和花猪怎么快速查找到自己分数呢?
—— 选“柜子”请选Map牌Container!
2、Map是何方神圣?
(1)Map里面的元素是pair类型的,为key-value的对应表达。基于key对value进行操作。比如,“长颈鹿,90”就是Map的一个元素,该元素由“长颈鹿”这个key和“90”这个value组成。
(2)Map可以基于key值通过自带的find()函数找到指定元素,还可以通过count()函数返回该指定元素在该Map 容器中的个数 —— 所以长颈鹿对map这个神奇的柜子发布find()命令,并给出自己的“长颈鹿”的key值,map就可以锁定到90分这个成绩;
(3)Map可以通过insert()函数向map容器中添加新元素——猴子摘水果去了成绩是后来补考的,老师可以对柜子发布insert()命令,然后将“猴子,59”存到柜子里。
(4)需要注意的是:这是一个神奇的柜子( map container),还有一些其他的特性,比如顺序排列,key值唯一等,详情可参考: 参考二
Set与Map的异同
他们都基于key值能实现快速查找;
set的key就是value,map是key-value分开的,其映射构成一个pair。
参考三