Et set er, så vidt jeg har forstået, ofte bygget over et red-black tree - og skulle i hvert fald opføre sig nogenlunde sådan.
Hvis jeg selv koder et binært søge træ, kan jeg sagtens få "positionen" af en node i træet: Altså hvor mange noder har en værdi der er mindre og hvor mange noder har en værdi der er højre. Og det altså i tiden O(h), hvor h er højden af træet. Det er self O(log(N)), hvor N er antallet af noder i træet, hvis træet er balanceret. (Det gør jeg ved at jeg til hver node tilføjer et tal, som angiver hvor mange efterkommere noden har, og det kan opdateres så indsættelse og sletning stadig sker i O(h) )
Hvis jeg har et set, og har indsat nogle elementer kan jeg ikke lige gennemskue om der er en smart måde at gøre noget lignende på.
Altså fx:
#include<set>
...
set<int> testSet;
testSet.insert(1);
testSet.insert(3);
testSet.insert(7);
testSet.insert(15);
testSet.insert(31);
testSet.insert(63);
testSet.insert(127);
I testSet skulle 31 så have position nr. 5 (Eller 4 hvis man 0-indekserer)
Så: Hvordan finder jeg ud af det i logaritmisk tid?
PS: Jeg spørger fordi jeg gerne vli bruge det til konkurrencer, hvor vi ikke får lov til at genbruge tidligere kode, så derfor det lidt mærkelig spørgsmål.