C++容器---关联式容器

来源:互联网 发布:淘宝中小卖家名单 编辑:程序博客网 时间:2024/05/18 01:47
标准的STL关联式容器分为set和map两大类,以及这两大类的衍生体multiset和multimap这些容器的底层机制均以RB-tree完成。

关联式容器:每个元素都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构便依照其键值大小,以某种特定规则将这个元素放置于适当位置。一般而言,关联式容器是一个平衡二叉树,以便获得良好的搜寻效率。平衡二叉树包括AVL-tree,RB-tree,AA-tree。

Set和MutiSet

set是集合,它的元素的键值就是实值,实值就是键值,不允许两个元素有相同的值。

 

我们不可以通过set的iterator来改变元素的值,因为set的元素值就是键值,改变键值会违反元素排列的规则。

 

在客户端对set进行插入或删除操作后,之前的迭代器依然有效(当然被删除那个元素的迭代器除外)。

 

set底层机制是RB-tree,所有的操作都只是转掉RB-tree的操作行为而已。

 

MultiSet和set几乎一样,唯一的区别是,multiset允许键值重复。

Map和MultiMap

Map的元素都是pair,第一个值是键值,第二个是实值。

 

我们可以通过map的迭代器来改变元素的实值。

 

MultiMap和Map几乎一样,唯一的区别是允许键值重复。