为什么C ++ STL不提供任何“树”容器?
为什么C ++ STL不提供任何“树”容器,而最好使用什么呢?
我想将对象的层次结构存储为树,而不是将树用作性能增强...
有两个理由可以使用树:
你想用树形结构来反映问题:
为此,我们增强了图形库
或者你想要一个像访问特性这样的树的容器
std::map
std::set
基本上这两个容器的特点是它们实际上必须使用树来实现(尽管这实际上并不是要求)。
另请参阅此问题:C树实现
可能出于同样的原因,没有增加树形容器。 实现这样一个容器有很多方法,而且没有什么好方法来满足每个使用它的人。
需要考虑的一些问题:
- 节点的孩子数是固定的还是可变的?
- 每个节点有多少开销? - 即,你需要父指针,兄弟指针等
- 提供什么算法? - 不同的迭代器,搜索算法等
最后,问题的结果是一个对每个人都足够有用的树容器将太重以至于不能满足大多数使用它的人。 如果您正在寻找强大的功能,Boost Graph Library本质上是树库可以用于的一个超集。
以下是一些其他通用树实现:
- Kasper Peeters'tree.hh
- Adobe的森林
- core :: tree
STL的理念是,您选择一个基于保证的容器,而不是基于容器的实施方式。 例如,您选择的容器可能基于对快速查找的需求。 对于你所关心的,容器可以作为一个单向列表来实现 - 只要搜索速度非常快,你就会开心。 那是因为你没有触及内部,你使用迭代器或成员函数来访问。 您的代码不受限于容器的实现方式,而是它的速度有多快,它是否具有固定和定义的顺序,或者它是否在空间上高效等等。
链接地址: http://www.djcxy.com/p/62801.html上一篇: Why does the C++ STL not provide any "tree" containers?