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

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

C++中的

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

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

因为

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

std::unordered_set is a real set, but std::set is a binary search tree

std::unordered_set 不比 std::set 多或少 "real"。它们都是套装,但要求和保证略有不同;一个设计为使用树实现 implementable,另一个设计为使用散列 table.

实现 implementable

P.S。树和散列 table 并不是表示集合的唯一方法。可以实现大多数(但不是全部)std::set 的一种内部数据结构是排序向量。特别是对于小集合,排序向量可以比 std::set.

快得多