STL中容器的介绍及分类

STL中容器的介绍及分类

  C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现,称为容器,如 queues(队列)、lists(链表)、和 stacks(栈)等。

一、容器介绍

  STL容器是由一些运用最广的一些数据结构实现出来的。常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射表)等等。这些数据结构按结构可以分为序列式(sequence)和关联式(associative)两种。
STL中容器的介绍及分类_第1张图片
  上图是各种容器的衍生层关系(这里所谓的衍生,并非派生关系,而是内含关系),例如heap内涵一个vector、priority-queue内含一个heap、stack和queue都含一个deque、set/map/multiset/multimap都含有一个RB-tree、hash_都内含一个hashtbale。

二、序列式容器

概念:
  所谓序列式容器,其中的元素都是可序的,但是未必都是有序的。
分类:
  顺序结构:vector、list、deque;
  容器适配器:stack、queue、priority-queue;
  之所以称为容器适配器,是因为例如stack、queue由只是将deque改头换面而已,所以它们是一种配接器(adapter);
  备注:C++语言本身提供一个序列式array(不属于STL范畴)。

三、关联式容器

概念:
  关联式容器,每笔数据(每个数据)都有一个键值(key)和一个实值(value)
特点:
  当元素被插入到关联式容器中时,容器内部数据结构(RB-tree或hash-table等)依据其键值大小,以某种特定规则将这个元素放置于适当位置;
  关联式容器没有头尾(只有最大元素和最小元素),所以不会有push_back()、push_front()、pop_back()、pop_front()、begin()、end()等操作。
分类:
  分为set(集合)、map(映射表)两大类,以及两大类的衍生体multiset(多键集合)、multimap(多键映射表)。
  SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表)以及以此hash table为底层机制而完成的hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)。
底层实现:
  关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜索效率。balanced binary tree有许多种类,包括AVL-tree、RB-tree、AA-tree,其中最被广泛应用于STL的是RB-tree(红黑树)。
  set、map、multiset、multimap底层均以RB-tree(红黑树)完成。RB-tree(红黑树)也是一个独立容器,但并不开放给外界使用。

你可能感兴趣的:(数据结构,数据结构,c++,stl)