Der Container std :: set (oder std :: map) ist eine Datenstruktur, die STL bereitstellt. In fast allen Compilern ist es als ein R & B-Baum mit garantierter log (n) -Einfügung, Such- und Entfernungszeit implementiert.Wie das Iterieren über ein std :: set sortierte Ergebnisse liefert
https://en.wikipedia.org/wiki/Red%E2%80%93black_tree
in einem roten und schwarzen Baum werden die Elemente auf der Basis des „weniger“ Operator des gespeicherten Elements sortiert. Also, im Grunde, wenn eine Wurzel N + 1 ist, wird N auf dem linken Unterbaum sein, während N + 2 auf dem rechten Unterbaum sein wird und diese Ordnung wird durch den weniger Operator entschieden werden.
Meine Frage ist, wenn Sie den folgenden Code ausführen:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
die Elemente in einer sortierten Reihenfolge zurückgegeben werden. Wie kann dies angesichts der Tatsache, dass die zugrunde liegende Datenstruktur ein rot-schwarzer Baum ist, möglich sein? Gibt es eine separate verknüpfte Liste, die gespeichert werden kann, um vom äußersten linken Teilbaum zum am weitesten rechts liegenden Teilbaum zu iterieren? Wenn nicht, was ist der Mechanismus hinter dieser Implementierung unter Verwendung eines R & B-Baumes?
Ich denke, das könnte ein Duplikat von http://stackoverflow.com/questions/2558153/what-is-the-undering-data-structure-of-a-stl-set-in-c – i4h
Es ist nicht ein Duplikat der obigen Frage, dass man grundsätzlich eine Information beantwortet, die ich bereits in dieser Frage angegeben habe - dass die zugrunde liegende Datenstruktur R & B-Bäume sind. – ralzaul