我需要在std::set中查找一个元素的索引。这个索引可以视为迭代器从开头开始的距离。 一种方法是:
for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);
这显然需要 O(n) 时间。但是我们知道,在 C++ 的 set 内部实现的二叉搜索树中,从根节点到指定节点的距离可以在 O(log n) 的时间内找到。
那么有没有办法在 C++ 的 set 中实现相同的操作,在 O(log n) 的时间内找到某个元素的索引呢?
O(log n)
的时间复杂度找到距离吗?set
通常是红黑树,每个节点并没有太多关于其左右子树元素数量的信息。请记住,你寻找的不是从根节点直接到叶子节点的距离,而是指定叶子节点左侧的叶子节点总数。 - Steve Jessop