C ++中的序列与关联容器
序列容器
在标准模板库中它们是指一组容器类模板,我们使用它来存储数据。 顾名思义,一个常见的属性是元素可以按顺序访问。
以下每个容器都使用不同的算法进行数据存储,因此对于不同的操作,它们具有不同的速度。 并且容器中的所有元素都应该是相同的类型。
- array = 它实现了不可调整大小的数组。例如:
int arr[10];
// 固定大小为 10 的数组。 - vector = 它实现了具有更快随机访问的动态数组,这些非常有用,因为它们与可以调整大小的数组不同。例如:
vector<int> v;
// int 类型的向量 - dequeue 用于实现双端队列,随机访问速度更快。例如:出队 dq; //字符类型的出队
- forward_list :它实现了单链表。例如:
forward_list fl;
// int 类型的forward_list
。 - list :它实现了双链表。例如:
list l;
// int 列表
关联容器
在标准模板库中,它们指的是用于实现关联数组的类模板组。 它们用于存储元素,但对其元素有一些限制。这些容器的两个重要特征是:
- 存在一个键。在
map
和set
的情况下,key
是唯一的。 在multimap
和multiset
的情况下,允许一个键有多个值。 在map
和multimap
的情况下,有键值对。在设置的情况下,只有键。 - 元素遵循严格的弱排序。
这些是关联容器下的以下内容
map
:这里创建的每个键都必须是唯一的。例如:map geek_no;
// 这里第一个数据类型是:key
,第二个数据类型是value
;set
:这里创建的键也必须是唯一的,但与 map 的一个重要区别是,这里的值本身充当键,因此这意味着 set 中的元素是唯一的,即没有重复。例如:set s;
// 值本身充当键。multimap
:与 map 相同,但这里的 key 不必是唯一的。例如:multimap geeks_no;
multiset
:与 set 相同,但这里元素的唯一性无关紧要,即可以多次拥有相同的元素,这与 set 不同。例如:multiset marks;
序列与关联(复杂性)
按顺序容器
- 简单的插入需要固定的时间。
- Front具有恒定的摊销时间。
- 中间插入很慢。
在关联容器中,大多数复杂性都以对数形式表示:
- 插入一个元素是 O(log n)
- 移除一个元素 O(log n)
- 搜索元素 O(log n)
- 递增或递减迭代器 O(1)(摊销)
- 中间插入速度更快。
无序关联容器
请注意,每个关联容器都有无序关联容器,其中包含没有任何特定顺序的元素。 无序关联容器的示例是: unordered_set
、 unordered_map
、 unordered_multimap
和 unordered_multiset
。