Pourquoi est std::map mis en œuvre comme un rouge-noir arbre?

Pourquoi est std::map mis en œuvre comme un rouge-noir arbre?

Il y a plusieurs équilibré arbres binaires (techniciennes se chargent) là-bas. Quelles ont été la conception de compromis dans le choix d'un rouge-noir arbre?

  • Bien que toutes les implémentations que j'ai vu utiliser un RB-tree, note que c'est encore dépendant de l'implémentation.
  • Il est dépendant de l'implémentation, alors pourquoi il en est ainsi que la mise en œuvre utilisation RB-arbres?
  • J'aimerais vraiment savoir si tout STL réalisateur a pensé à l'aide d'une benne de la Liste.
  • C++de map et set sont effectivement commandé la carte et de l'ensemble ordonné. Ils ne sont pas mis en œuvre à l'aide de fonctions de hachage. Chaque requête est prendre O(logn) et pas O(1), mais les valeurs sont toujours triés. À partir de C++11 (je crois), il y a unordered_map et unordered_set, qui sont mis en œuvre à l'aide de fonctions de hachage, et bien qu'ils ne sont pas triés, la plupart des requêtes et les opérations sont possibles dans O(1) (moyennement)
  • c'est vrai, mais pas que c'est intéressant dans la pratique. Le standard de fait de la complexité des garanties avec un algorithme spécifique ou un ensemble d'algorithmes dans l'esprit.
  • Il existe plusieurs autres types de auto-équilibrage des arbres avec le même big-O complexité rouge-noir arbre, comme le B-arbre et arbre AVL.