我想知道,如果任何人都可以推荐一个好C++树执行情况,希望有一个是 stl兼容的,如果在所有可能的。

为了记录在案,我已经写树算法以前许多次,并且我知道它可以很有趣,但我希望以务实和懒惰如果在所有可能的。所以一个实际的链接到一个工作方案的目标是在这里。

注:我在寻找一个通用的树,而不平衡的树木或地图集的结构本身及连接的树是重要的,在这种情况下,不仅在数据内。所以每一分支需要能够保持任意金额的数据,并且每个分支应分别iterateable.

有帮助吗?

解决方案

我不了解您的要求,但是您最好不要使用图表(例如 Boost Graph )如果你对结构感兴趣而不是树特定的好处,比如平衡速度?你可以通过图形“模拟”一棵树,也许它(在概念上)更接近你正在寻找的东西。

其他提示

请参阅

C ++的tree.hh库为n-ary树提供类似STL的容器类,模板化存储在节点上的数据。提供了各种类型的迭代器(下订单,预订等)。在可能的情况下,访问方法与STL兼容,或者可以使用其他算法。

HTH

我建议使用std :: map而不是树。

树的复杂性特征是:

插入:<!>; <!>; <!>; <!>; <!>; <!>; <!> NBSP NBSP NBSP NBSP NBSP NBSP NBSP; O(LN(n))的结果, 清除:<!>; <!> NBSP NBSP; O(LN(n))的结果, 查找:<!>; <!>; <!>; <!>; <!>; <!>; <!>; <!>; <!> NBSP NBSP NBSP NBSP NBSP NBSP NBSP NBSP NBSP; O(LN (n))的结果,

这些与std :: map保证的特征相同。
因此,大多数std :: map的实现使用了封面下的树(红黑树)(虽然从技术上讲这不是必需的)。

好的伙计们,我找到了另一个树库; stlplus.ntree 。但尚未尝试过。

如果您没有(键,值)对,只需要键,请使用std :: set。它使用与std :: map相同的红黑树。

让我们假设的问题是关于平衡的(在某些形式,主要是红色黑色树)的二进制的树木,即使它不是这种情况。

平衡的二进制文件的树木,就像矢量,允许管理一些订购的要素,没有任何需要的关键(如通过插入的要素中的任何地方的矢量),但是:

  • 与最佳O(日志(n))或更复杂的所有修改的一个元素(增加/消除在开始、结束 之前和之后的任何迭代)
  • 坚持不懈 的迭代通过的任何修改,除了直接破坏的元件指出的迭代器。

任选一个可以支持访问索引像矢量(与成本的一个位置由元),用O(日志(n))的复杂性。如果使用的迭代将随机的。

任选了可以强制执行通过一些比较func,但是持久性的迭代允许使用不可重复的比较方案(例如:任意汽车的车道改变期间交通堵塞).

在实践中,平衡二树有接口的矢量,列表中,双链表、地图、基于,双端,队列,符...实现理论上的最佳O(日志(n))的复杂性,对所有的单元的操作。

<sarcastic> 这可能是为什么c++stl没有提出它 </sarcastic>

个人可能不会实现一般的平衡树通过自己,由于难以获得正确管理的平衡,尤其是在件提取。

没有广泛提供执行平衡的二进制树,因为国家的技术红黑色树(在这种时间的最佳类型的平衡树由于固定数量的代价高昂的树,重组期间,删除)知道实施,复制盲目的每一个实施者从最初的编码结构的发明家,不允许迭代持久性。它是可能的原因没有完全functionnal树模板。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top