使用不同数据结构实现 std::set

Posted

技术标签:

【中文标题】使用不同数据结构实现 std::set【英文标题】:Implementation of std::set using different data structures 【发布时间】:2019-09-23 08:56:23 【问题描述】:

受这个问题的启发:Why isn't std::set just called std::binary_tree? 我想出了自己的一个。红黑树是唯一可能满足std::set 的数据结构要求还是有其他要求?例如,另一个自平衡树 - AVL tree - 似乎是具有非常相似属性的好选择。理论上是否可以替换std::set 的底层数据结构,还是有一组要求使红黑树成为唯一可行的选择?

【问题讨论】:

AVL 树在大多数现实世界的情况下比 RB 树的性能更差(不要与渐近复杂性混淆)。您可以使用 AVL 树并保持合规,但它不会为您赢得任何客户。 【参考方案1】:

在大多数现实世界的情况下,AVL 树的性能(不要与渐近复杂性混淆)比 RB 树更差。您可以将std::set 基于 AVL 树并完全符合标准,但它不会为您赢得任何客户。

【讨论】:

以上是关于使用不同数据结构实现 std::set的主要内容,如果未能解决你的问题,请参考以下文章

std::Set

std::set 和 < 运算符重载的奇怪行为?

std::set 唯一 ptr 范围插入

std::set 如何比 std::map 慢?

构造指针类型的 std::set 是不是有效?

C++ std::set<>是什么 怎么用