【问题标题】:What kind of tree implementation is STL set?STL设置了什么样的树实现?
【发布时间】:2012-04-29 19:40:01
【问题描述】:

我知道在STL中vector代表动态数组的实现。 list 也代表了链表(双向链表)的实现。我知道 set 有一个类似于 tree 的实现。从算法复杂度来看,set 中的大多数内置函数都具有 o(1)o(log n) 的复杂度。那么这棵树是实现为平衡树还是任何其他类型的树,例如红黑树,如果是这样,为什么选择这样的树结构?

【问题讨论】:

  • 您的意思是真正的 STL 还是通常被误认为是 STL“C++ 标准库”?

标签: c++ data-structures tree


【解决方案1】:

该标准对实现没有任何限制(除了复杂性保证)。

换句话说,它依赖于实现。通常,它是一棵红黑树(参见例如 /usr/include/c++/x.y.z/bits/stl_tree.h,其中 x.y.z 是您的特定 GCC 版本)。

【讨论】:

  • 我正在使用 std::set 并在其中插入值。我不这样做是为了使任何特定于某种树的东西我的集合应该是二进制或红黑或平衡。那么它真的依赖于实现吗?
  • @Ritesh:我不确定你的意思是什么,但是是的,它确实取决于实现。
  • “依赖于实现”在 C++ 标准的上下文中意味着由编译器/库供应商决定他们如何实现它。它与您如何编写使用库的代码无关,@Ritesh。
  • @oli 如果用户没有为它提供任何实现,它通常是红黑的。这就是你的意思?
  • @Ritesh,每个编写 STL 版本的人的做法可能不同。这就是实现依赖的意思。不过,它们中的大多数都是红黑二叉树。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2011-07-02
  • 1970-01-01
  • 2021-05-21
  • 2010-09-07
相关资源
最近更新 更多