std :: map是否自动平衡

时间:2016-12-24 10:12:37

标签: c++ dictionary stl containers balance

我知道STL map / set的主流实现使用黑红树。 我的问题是:插入/删除元素时这些实现是否也会自动平衡树?

如果没有,那么当元素被排序和插入时,它将始终附加到最右边的位置。最差的查找成本是O(n)。

那么,黑红树是否会自动平衡?

3 个答案:

答案 0 :(得分:3)

是。红黑树执行节点旋转以确保树保持平衡

答案 1 :(得分:2)

查看inserterase std :: map 操作。

保证这些操作的最差复杂性是对数的。

实际上,使用哪种树来实现 std :: map 并不重要。但是这棵树必须为插入擦除和其他一些操作提供必要的复杂性。基本上它意味着树必须平衡(当然,当元素插入或移出时自动平衡。)

对于 std :: set

也是如此

答案 2 :(得分:1)

是。在每次插入后的红黑树中,如果树不平衡,树中的一些元素将被移动到新的位置。