【发布时间】:2015-01-31 12:31:53
【问题描述】:
我们可以从几个来源看到 std::map 是使用红黑树实现的。据我了解,这些类型的数据结构不会以任何特定的顺序保存其元素,而只是保持 BST 属性和高度平衡要求。
那么,为什么 map::begin 是常数时间,并且我们能够迭代有序序列?
【问题讨论】:
-
@Matt Courbrough 这表示 std::map 保证被排序,而不是如何使用红黑树来实现。
-
可能误解了您的问题,但这些答案说明了用于订购的比较功能。
-
DietrichEpp 的回答涵盖了排序方面。关于“那么,
map::begin是如何成为常数时间的”——而不是在调用begin时通过树下降(将是 O(log2N)),实现跟踪(它在内部选择指针或迭代器——无论如何最终可能是相同的事情 - 但begin本身显然会返回一个迭代器)当前树中的最低值节点,如果需要在erase、insert等之后更新它 - 所以它可以是在恒定时间内提供。最后一个节点将被类似地跟踪(对于rbegin())。 -
@Tony D 这对于开始迭代器是有意义的。我猜它一定是在做一些事情,比如遍历并在某个时候对其进行排序以获得序列的其余部分?
标签: c++ data-structures