std :: set不是真正的集合。 std :: unordered_set是一个实集,而std :: set是一个二进制搜索树,更具体地说是一棵红黑树。那么为什么将其称为std :: set?是否有一些特定功能可以将std :: set与二叉树区分开?谢谢。
答案 0 :(得分:6)
为什么std :: set不只是称为std :: binary_tree?
因为
std::set
没有提供足够的操作以用作通用搜索树。它仅提供到搜索树的特定应用程序的接口:集合的表示。std::set
是二进制搜索树;尽管红黑BST可能是唯一可以满足std::set
要求的数据结构,并且已经考虑到该接口仔细地指定了该数据结构,但是内部数据结构的选择是实现细节。 / li>
std::unordered_set
不被称为std::hash_table
。std :: unordered_set是一个真实的集合,而std :: set是一个二进制搜索树
std::unordered_set
的真实性与std::set
差不多。它们都是具有稍微不同的要求和保证的集合;一种设计为可使用树实现,另一种设计为可使用哈希表实现。
P.S。树和哈希表不是表示集合的唯一方法。可以实现std::set
的大部分(但不是全部)的一种内部数据结构是排序向量。尤其是对于小集合,排序向量可以比std::set
快得多。