distance entre std::set() et std::set itérateur en O(logn)

J'ai besoin de trouver l'indice d'un élément dans std::set. Cet indice peut être visualisée comme la distance de l'itérateur de début.
Une façon peut-être:

for(int i = 0, set<int>::iterator it = s.begin(); it != iteratorToBeFound; ++it, ++i);

De toute évidence, cela prend O(n) fois. Mais nous savons que la distance à partir de la racine dans un arbre de recherche binaire tel que mis en œuvre par l'interne peut être trouvé en O(log n).

Est leurs façon de mettre en œuvre les mêmes pour trouver l'index en O(log n) le temps en C++ ensemble?

Pourquoi auriez-vous besoin de l'index?
Êtes-vous sûr qu'il est possible de trouver la distance en O(log n) temps dans un arbre de recherche binaire? set agit généralement d'un rouge-noir de l'arbre, qui n'a pas beaucoup d'informations à chaque nœud sur la façon dont de nombreux éléments sont à sa gauche et à droite respectivement les sous-arborescences. N'oubliez pas que vous n'êtes pas à la recherche de la distance directement à partir de la racine, vous êtes à la recherche pour le nombre total de feuilles à la gauche de la feuille que vous avez.
Ohh, de sorte que leur n'est pas un moyen pour calculer l'indice en O(logn) dans la R-B de l'arbre?

OriginalL'auteur divanshu | 2012-09-21