【发布时间】:2016-02-05 05:14:32
【问题描述】:
容器 std::set(或 std::map)是 STL 提供的数据结构。在几乎所有编译器中,它都被实现为 R&B 树,保证 log(n) 插入、查找和删除时间。
https://en.wikipedia.org/wiki/Red%E2%80%93black_tree
在红黑树中,元素根据存储元素的“less”运算符进行排序。所以基本上如果根是 N + 1 , N 将在左子树上,而 N + 2 将在右子树上,这个顺序将由 less 运算符决定。
我的问题是在执行以下代码时:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
元素按排序顺序返回。考虑到底层数据结构是一棵红黑树,这怎么可能呢?是否存储了一个单独的链表以便能够从最左边的子树迭代到最右边的子树?如果不是,这个使用 R&B 树的实现背后的机制是什么?
【问题讨论】:
-
这不是上述问题的重复,它基本上回答了我在这个问题中已经说过的一个信息——底层数据结构是 R&B 树。