【发布时间】:2012-09-13 20:25:48
【问题描述】:
我需要在 std::set 中找到一个元素的索引。该索引可以可视化为迭代器与开始的距离。 一种方法可以是:
for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);
这显然需要 O(n) 时间。但是我们知道,通过set内部实现的二叉搜索树到根的距离可以在O(log n)时间内找到。
他们有什么方法可以在 C++ 集中找到 O(log n) 时间的索引吗?
【问题讨论】:
-
为什么需要索引?
-
你确定可以在二叉搜索树中找到
O(log n)时间的距离吗?set通常是一棵红黑树,它在每个节点上没有太多关于其左右子树中分别有多少元素的信息。请记住,您不是在寻找直接到根的距离,而是在寻找您拥有的叶子左侧的叶子总数。 -
@SteveJessop:哦,那么他们没有办法计算 R-B 树中 O(logn) 中的索引吗?