我认为您通常已经回答了自己的问题,但是,这是:
不像树那么紧凑。(出于实际目的,负载系数永远不会为1)
不一定是真的。类型的树的每个节点(我们假设它是一棵红黑树)都
T使用至少等于的空间
2 * pointer_size + sizeof(T) +sizeof(bool)。这可能
3 * pointer size取决于树是否包含
parent每个树节点的指针。
将此与哈希图进行比较:由于
load factor <1您所说的事实,每个哈希图都会浪费数组空间。但是,假设哈希图使用单链表进行链接(实际上,没有理由不这样做),则插入的每个元素仅取
sizeof(T) +pointer size。
请注意,此分析忽略了可能来自对齐使用的额外空间的任何开销。
对于任何
T具有较小大小的元素(因此,任何基本类型),指针的大小和其他开销都是主要的。在的负载因子
>0.5(例如)的
std::unordered_set可能确实占用更少的内存比等效
std::set。
另一个重大遗漏的事实
std::set是,根据给定的比较函数,通过a进行迭代保证可以产生从最小到最大的顺序,而通过a进行迭代
std::unordered_set将以“随机”顺序返回值。



