Il contenitore std :: set (o std :: map) è una struttura dati fornita da STL. In quasi tutti i compilatori è implementato come albero R & B con un registro (n) garantito, il tempo di ricerca e di rimozione.Come iterating su un oggetto std :: set restituisce risultati ordinati
https://en.wikipedia.org/wiki/Red%E2%80%93black_tree
In un albero rosso e nero gli elementi sono ordinati in base all'operatore "meno" dell'elemento memorizzato. Quindi in pratica se una radice è N + 1, N sarà nella sottoalbero di sinistra mentre N + 2 sarà nella sottostruttura di destra e questo ordine sarà deciso dal meno operatore.
La mia domanda è quando si esegue il codice qui sotto:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
gli elementi vengono restituiti in un modo ordinato. Come può essere possibile considerando il fatto che la struttura dati sottostante è un albero rosso e nero? Esiste una lista collegata separata memorizzata per poter iterare dal sub-albero più a sinistra al sotto-albero più a destra? In caso contrario, qual è il meccanismo alla base di questa implementazione utilizzando un albero B R &?
Penso che questo potrebbe essere un duplicato di http://stackoverflow.com/questions/2558153/what-is-the-underlying-data-structure-of-a-stl-set-in-c – i4h
Non è un duplicato della domanda di cui sopra, che fondamentalmente risponde a un'informazione che ho già affermato in questa domanda - che la struttura dati sottostante è costituita da alberi R & B. – ralzaul