为什么 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?
因为
- Tree 没有描述界面的使用方式。 Set 确实如此。
std::set
没有提供足够的操作来用作通用搜索树。它只为搜索树的特定应用程序提供接口:集合的表示。
- 从技术上讲,标准并未指定
std::set
是二叉搜索树;尽管红黑 BST 可能是唯一可以实现 std::set
要求的数据结构,并且已经在考虑该数据结构的情况下仔细指定了接口,但内部数据结构的选择是一个实现细节。
- 出于同样的原因
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
.
快得多
std::set在数据结构上并不是一个真正的集合。 std::unordered_set 是实数集,但 std::set 是 二叉搜索树 ,更具体地说是红黑树。那为什么叫std::set呢?是否有一些特定的功能可以将 std::set 与二叉树区分开来?谢谢
Why isn't std::set just called std::binary_tree?
因为
- Tree 没有描述界面的使用方式。 Set 确实如此。
std::set
没有提供足够的操作来用作通用搜索树。它只为搜索树的特定应用程序提供接口:集合的表示。- 从技术上讲,标准并未指定
std::set
是二叉搜索树;尽管红黑 BST 可能是唯一可以实现std::set
要求的数据结构,并且已经在考虑该数据结构的情况下仔细指定了接口,但内部数据结构的选择是一个实现细节。 - 出于同样的原因
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.
P.S。树和散列 table 并不是表示集合的唯一方法。可以实现大多数(但不是全部)std::set
的一种内部数据结构是排序向量。特别是对于小集合,排序向量可以比 std::set
.