为什么C++ STL没有提供任何“树”容器?
C++ STL是什么?
STL(Standard Template Library)是一组C++模板类,提供常见的编程数据结构和函数。它是一个包含容器类、算法、函数和迭代器的库。
它是一种通用的库,因此其组件是参数化的。学习 模板类 是使用STL的先决条件。 STL有4个组件:
- 算法
- 容器
- 函数
- 迭代器
容器: 容器是处理其他对象或元素的集合的对象,按顺序或按层次结构实现定义良好的数据结构。
例如: vector、set、queue、stack、list、map等。
注意: 查看本文以了解有关STL和容器的更多信息。
为什么STL没有“树”容器:
首先,我们应该看一下需要树的原因:
- 用户想以层次结构的方式存储数据或
- 用户希望以特定的顺序获得数据。
对于这两种情况,我们已经有了容器。
set、multiset 和 unordered_set:
- Set和 multiset 以有序方式存储元素,都是动态容器。Set和multiset内部使用二叉搜索树的概念构建。它以 O(log N) 时间插入和删除数据元素,并不存储重复值。
- 如果要存储重复值,可以使用multiset。如果不需要任何特定顺序,可以使用unordered_set,在 O(1) 时间内插入和删除数据元素。
基本上,这两个容器的特点是它们实际上必须使用树来实现(虽然这实际上并不是必需的)。
map、multimap 和 unordered_map:
- 动态容器,如 map,multimap和unordered_map将数据存储为键值对。如果键必须是唯一的,则可以使用map或unordered_map
- 在multimap中,多个元素可以具有相同的键。键值对可用于存储父/子关系。
这些容器中最大的优点之一是它们是通用类,因此可以进行自定义。unordered_map以 O(1) 的随机顺序存储数据,map和multimap以 O(log N) 时间以有序方式存储数据。
根据我们的需求,可以使用任何这些容器来具有与树相同的特性。