C++ 头文件系列(set)

简介

头文件包含setmultiset些微独八九不离十模版,这里而描述的定义和map非常相像,甚至并成员函数都几乎如出一辙,所以马上篇随笔会大缺。

图片 1

set

set如果翻译成汉语应该是会师的意,这里又确切的说是唯一不变聚集,性质与map类似:

  • 关联性
  • 素唯一性
  • 动态增长
  • 有序性

除此以外的一个要特征是:

  • Key与Value是同一个靶(自映射)

set == map

概念使用set的当儿偏偏待传入一个项目参数,这个项目即凡是key,也是value。
实际上,set是map的特有情况,虽然set没有键值对这种元素形式,但set的key本身即是value,map上键值对得映射在此间可以用作是因素本身及自家的投射。
所以说,两边在促成达标该是发出特别非常之叠的
而自概念上吧,set完全好由map来实现,从而成为一个容器适配器。
但没有那么开的来头,我思最酷程度上是为省去内存吧,value值的保存了是未曾必要之。

实现

由此翻看VS
2013版的C++头文件可以发现,set和map都是一直共有继承的_Tree类(红黑树),没有外其他个人成员。
编码上之只是重用性,佐证了上述想法。

以及map不同之处

倘若说发生啊两样,那就算是set不提供要素修改的机能—-没有operator[]、at函数。

要是元素让插入集合,只能为删除,不能够被再赋值
可能对集合这个定义的话,修改元素的动作最不经常表现了,所以标准库索性就夺丢了是职能。

multiset

同multimap类似,这个类模版相当于是支持多只键值的set版本。