一、介绍
C++的set容器又被称为集合,所有元素在被插入后都会自动排序。
二、数据结构
set / multiset属于关联式容器,底层数据结构是用二叉树实现的。
其余的容器比如vector、deque和list等为序列式容器,因为他们底层使用线性序列结构,里面存储的是元素本身。而关联式容器所存储的是键值对<key,value>,这种方式相比于线性序列在数据检索时效率更高。
常见的关联式容器有:map、set、multimap、multiset,这四种容器的共同点是:
使用红黑树 / 平衡搜索树作为其底层结构,容器中的元素是一个有序的序列。
三、set与multiset的区别
3.1 二者插入元素的区别
set | 不允许值相同的元素出现 |
multiset | 允许相同的元素出现 |
在插入元素的时候,set的insert函数会返回bool类型的值,来表示插入是否成功。
(※注意※ 其实set的insert返回值是一个pair类型的变量,其中包含着bool,也有别的值)
而multiset的insert函数不会返回任何值。
3.2 pair “对组”类型
pair类型,称为对组类型。它是由两种类型的数据组合的,数据的类型是模板(由自己确定)
对组的初始化有以下两种形式:
pair<type1, type2> p(value1, value2); | 创造一个第一个变量类型为type1,第一个值为value1; 第二个变量类型为type2,第二个值为value2的对组对象 |