STL容器
标准模板库 (STL)用于存储相关对象的集合提供若干容器。 容器是所有模板类,允许您指定的对象在容器允许。 本主题提供 STL 容器概述帮助您确定哪个容器需的最佳方法。
可选择的两个 STL 库从:本机 STL 和 STL/CLR。 有关 STL/CLR 的更多信息,请参见 STL/CLR 库参考。
在 STL 的容器可以分为三个类别、序列容器、关联容器和容器适配器。 这些类别和属于每个类别的集合,摘要示。 详细信息可以在容器的引用文档中找到。
序列容器
序列容器维护原始排序插入的元素。 这在何处可以指定插入元素在容器。
deque (双端队列) 的容器允许快速插入和移除在容器的开始和结束。 您还可以随机访问所有元素快速。
list 容器允许快速插入和删除任何位置在容器,但是,您不能随机访问一个元素在容器。
vector 容器的行为类似于数组,但是,自动增大根据要求。
有关序列容器的更多信息,请参考下表:
容器 |
本机 STL |
STL/CLR |
---|---|---|
deque |
||
list |
||
vector |
关联容器
关联容器的定义特征是元素按预定义的顺序插入,如排序的 ascending。
关联容器可以分为两部分:映射和设置。 map,有时称为字典,包括键/值对。 键用于排序序列,并且,该值在某种程度上与该项。 例如, map 可能在文本包含表示每个单词和值的键表示字显示该文本的次数。 set 是一个升序容器唯一元素。
map 和要插入的 set 只允许键的一个实例或组件添加到容器。 如果需要组件的多个实例,请使用 multimap 或 multiset。
两个映射和设置支持双向迭代器。 有关迭代器的更多信息,请参见 迭代器。
当不正式的一部分 STL 条件, hash_map 和 hash_set 通常用于提高搜索时。 这些容器存储其元素作为哈希表,其中每个表项目包含双向链接列表元素。 若要确保最快的搜索时,请确保组件的哈希算法返回均匀地分配的哈希值。
有关关联的容器的更多信息,请参考下表:
容器 |
本机 STL |
STL/CLR |
---|---|---|
hash_map |
||
hash_multimap |
||
hash_multiset |
||
hash_set |
||
map |
||
multimap |
||
multiset |
||
set |
容器适配器
容器适配器是上述容器的变体。 容器适配器不支持迭代器。
priority_queue 容器组织了这样的值较高的元素始终是第一个队列。
queue 容器遵循 FIFO (首先,首先) 语义。 第一个元素插入 (驱动器) 为第一个要移除的队列 (弹出)。
stack 容器按 LIFO (之前,先) 语义。 在堆栈中插入 (驱动器) 最后一个元素是要移除的第一个元素 (弹出)。
由于容器适配器不支持迭代器,它们不能与 STL 算法。 有关算法的更多信息,请参见 算法。
有关容器适配器的更多信息,请参考下表:
容器 |
本机 STL |
STL/CLR |
---|---|---|
priority_queue |
||
queue |
||
stack |
容器元素的要求
元素插入 STL 容器可以提供一个公共复制构造函数、一个公共析构函数和一个公共赋值运算符的是任何对象类型。 析构函数可能不引发异常。 此外,关联容器例如 set 和 map 必须具有公共比较运算符定义,默认情况下是 operatorAMP_LT。 在容器的某些操作可能还需要一个公共的默认构造函数和一个公共相等运算符。
访问的容器元素
使用迭代器,容器的元素访问。 有关更多信息,请参见 迭代器。
备注
还可以使用 对于每个, 重复在 STL 集合。有关更多信息,请参见 如何:循环访问与的每个的 STL 集合。