关联式容器(associative containers)

根据数据在容器中的排列特性,容器可分为序列式(sequence)和关联式(associative)两种。

标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均是以RB-tree(红黑树)完成。RB-tree也是一个独立的容器,但并不开放给外界使用。

此外,SGI STL还提供一个不在规格标准之列的关联式容器:hash table(散列表),以及以此hash table为底层机制而完成的hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)。

所谓关联式容器,观念上类似关联数据库:每个数据都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(RB-tree或hash-table)便依照其键值大小,以某种特定规则将这个元素放置于适当的位置。

一般而言,关联式容器的内部结构是一个balance binary tree(平衡二叉树)以获得良好的效率。

关联式容器(associative containers),布布扣,bubuko.com

时间: 2024-10-20 02:06:23

关联式容器(associative containers)的相关文章

关联式容器的总结

今天细致的学习了map和set容器的用法和功能,终于感受到了自己之前对stl的认识还是太少太浅薄了 今天我来总结一下答题的框架 容器首先分为关联式容器和序列式容器, 简单的是序列式容器,我先说一下序列式容器,序列式容器其实说白了就是简单的链表的实现,内部查找的顺序都是按照链表的顺序结构来查找删除和实现的, 下面说的就是关联式容器{ 再说关联式容器之前我先介绍几个知识点: 1二叉搜索树,二叉搜索树可以分为两中,一种是平衡二叉树,另一种是非平衡二叉树,平衡二叉树的实现其实就是我们所说的关联式容器的实

《STL源码剖析》学习笔记-第5章 关联式容器(二)

1.set和multiset set的特性: (1)所有元素都会根据元素的键值自动被排序. (2)set是集合,它的元素的键值就是实值,实值就是键值,不允许两个元素有相同的值. (3)不可以通过set的iterator来改变元素的值,因为set的元素值就是键值,改变键值会违反元素排列的规则. (4)在客户端对set进行插入或删除操作后,之前的迭代器依然有效.当然,被删除的元素的迭代器是个例外. (5)它的底层机制是RB-tree.几乎所有的操作都只是转调用RB-tree的操作行为而已. mult

C++ 容器:顺序性容器、关联式容器和容器适配器

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

《STL源码剖析》读书笔记之关联式容器(1)

1.AVL树 AVL tree是指任何节点的左右子树高度相差最多1的二叉搜索树.任何节点左右子树高度最多相差1能够保证AVL树具有"对数深度"的平衡状态.在对AVL tree进行插入操作时,可能造成树平衡被破坏.根据新结点插入位置的不同,可以将平衡的破坏分成四种情况:左左,左右,右左,右右.其中左左和右右被称为外侧插入,可以采用单旋转操作调制解决.而左右和右左则称为内侧插入,可以采用双旋转操作调整解决. 单旋转: 双旋转: 2.RB-tree RB-tree是另外一个被广泛应用的平衡二

Ch5 关联式容器(下)

5.7 hushtable 5.7.1 hushtable概述 开链:在每一个表格元素中维护一个list:hash function为我们分配某一个list,然后我们在那个list身上执行元素的插入.搜寻.删除等操作. 5.7.3 hashtable的迭代器 template <class Value, class Key, class HashFcn, class ExtractKey, class EqualKey, class Alloc> struct __hushtable_iter

《STL源码剖析》读书笔记之关联式容器(2)

1.hashtable 二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性.而hashtable在插入.删除.搜寻等操作上也具有"常数平均时间的表现",而且这种表现是以统计为基础的,不依赖于输入的随机性. 一个简单的hashtable的例子: 如果元素是32bits而不是16bits,我们要准备的array就必须是4GB的.这就大的不切实际了.如何避免一个大的荒谬的数组呢?办法之一就是使用某种映射函数,将大数映射为小数.负责将某以元素映射为一个&qu

《STL源码剖析》学习笔记系列之五——关联式容器(2)

Hashtable 2.1 简介    哈希表,又名散列表,可以提供"常数时间"的插入.删除.查询等操作.不同的元素通过hash function映射到不同的位置,但当不同元素获得经hash function获得相同的位置(索引)时,则发生"碰撞",此时需要通过以下几种方法为新加入的元素寻找新的索引地址. 1.        线性探测法 由于为元素准备的为一块连续内存空间地址,该方法会循序往下一一寻找,若达到所分配地址尾端,则环绕到头部继续寻找.所找到的第一个空闲地

Ch5 关联式容器(中)

5.3 set 所有元素都会根据元素的键值自动被排序,set元素的键值就是实际值,实际值就是键值,set不允许两个元素有相同的键值: 因为set元素的值就是其键值,关系到set元素的排列规则,所以set的迭代器是constant iterator: 对set进行insert或erase操作,其迭代器在操作后仍然有效(这点和list相同): 标准STL的set是以RB-tree为底层机制的,几乎所有的set操作行为,都只是调用RB-tree的操作行为而已. 5.4 map 所有元素都会根据元素的键

C++ unordered Associative Containers(C++11)

C++11 引进了无序关联容器(unordered associative containers)的概念. 有unordered set or multiset, 以及unordered map or multimap. 顾名思义, unordered的意思就是元素没有固定的顺序, 并且元素的顺序可能会随着时间的变化而变化. Internally, unordered container 是使用hash table(哈希表)实现的. 所谓的hash Table, 就是an array of li