为什么std :: set不只是称为std :: binary_tree?

时间:2019-03-27 10:57:16

标签: c++ data-structures set binary-tree binary-search-tree

就数据结构而言,C ++中的

std :: set不是真正的集合。 std :: unordered_set是一个实集,而std :: set是一个二进制搜索树,更具体地说是一棵红黑树。那么为什么将其称为std :: set?是否有一些特定功能可以将std :: set与二叉树区分开?谢谢。

1 个答案:

答案 0 :(得分:6)

  

为什么std :: set不只是称为std :: binary_tree?

因为

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

std :: unordered_set是一个真实的集合,而std :: set是一个二进制搜索树

std::unordered_set的真实性与std::set差不多。它们都是具有稍微不同的要求和保证的集合;一种设计为可使用树实现,另一种设计为可使用哈希表实现。

P.S。树和哈希表不是表示集合的唯一方法。可以实现std::set的大部分(但不是全部)的一种内部数据结构是排序向量。尤其是对于小集合,排序向量可以比std::set快得多。