STL中容器的介绍及分类

STL中容器的介绍及分类

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

一、容器介绍

  STL容器是由一些运用最广的一些数据结构实现出来的。常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射表)等等。这些数据结构按结构可以分为序列式(sequence)和关联式(associative)两种。
容器分类
  上图是各种容器的衍生层关系(这里所谓的衍生,并非派生关系,而是内含关系),例如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(红黑树)也是一个独立容器,但并不开放给外界使用。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

使君杭千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值