【发布时间】:2018-05-18 02:06:11
【问题描述】:
这是否会导致 std::map/set 中的不平衡树(以及随后的较差搜索性能):
std::set<int> s;
for(int i = 0; i< 1000; ++i)
s.insert(s.end(), i);
?
或者换句话说:“提示插入”是否会根据需要重新平衡底层树?
Afaik,C++ 标准不保证这一点,但我想知道最流行的实现在这种情况下如何表现。
【问题讨论】:
-
我认为它不会,毕竟实现可能已经优化为插入有序序列。实际上,在这种特殊情况下,提示是不必要的(有一些不必要的开销)。
-
@alfC 这被证明是一个有趣的问题......如果树在每次提示(正确与否)插入时重新平衡自身 - 这棵树是否提供“摊销常数”保证? (毕竟重新平衡不是免费的)如果它不重新平衡 - 某些插入序列不会导致不平衡树吗?
标签: c++