为什么 std::set 不叫 std::binary_tree?

Why isn't std::set just called std::binary_tree?

本文关键字:std tree 不叫 set 为什么 binary      更新时间:2023-10-16

std::set in C++在数据结构方面不是一个真正的集合。 std::unordered_set 是一个实数集合,但 std::set 是一个二叉搜索树,更具体地说是一棵红黑树。那么,为什么它被称为std::set呢?是否有一些特定的功能可以将 std::set 与二叉树区分开来?谢谢。

为什么 std::set 不叫 std::binary_tree?

因为

  1. 树不描述如何使用接口。设置确实如此。
  2. std::set提供的操作不足以用作通用搜索树。它只为搜索树的特定应用程序提供一个接口:集合的表示形式。
  3. 从技术上讲,该标准没有指定std::set是一个二叉搜索树;尽管红黑BST可能是唯一可以达到std::set要求的数据结构,并且接口已经仔细指定了该数据结构,但内部数据结构的选择是一个实现细节。
  4. 出于同样的原因,std::unordered_set不被称为std::hash_table

std::unordered_set 是一个实数集合,但 std::set 是一个二叉搜索树

std::unordered_set并不比std::set更"真实"。它们都是要求和保证略有不同的套装;一个设计为可使用树实现,另一个设计为可使用哈希表实现。

附言树和哈希表并不是表示集合的唯一方法。可以实现大多数(但不是全部)std::set的内部数据结构是排序向量。特别是对于小集合,排序向量可以比std::set快得多。