我知道std::set
是一个平衡的树,标准C ++禁止访问std::set
中节点的子节点,但我想知道是否可以访问节点中的子节点和父节点 boost 库中的avl_set
。如果它不可能,是否有任何可靠的库,如 boost ,其中包含允许此类操作的自平衡树?
答案 0 :(得分:1)
是的,boost包含一个avl树实现(以及它的一些变体,IIRC)。
这是Boost Intrusive库的一部分。如果您习惯于常规(标准库)容器,那么这个库的语义可能有点不寻常。
实际上,该库附带了许多竞争树算法,您可以通过选择不同的模板参数类型进行切换。见http://www.boost.org/doc/libs/1_58_0/doc/html/intrusive/node_algorithms.html
另请注意,侵入式容器 - 非常自然 - 非常开放。您可以检查节点挂钩,或者实际上用您的custom value traits替换它们,这会使指针布局完全在您的控制之下。