Предположим, что речь идет о сбалансированных (в некоторой форме, в основном красно-чёрном дереве) бинарных деревьях, даже если это не так.
Сбалансированные двоичные деревья, такие как vector, позволяют управлять некоторым упорядочением элементов без необходимости использования ключа (например, вставляя элементы в любом месте вектора), но:
- С оптимальной O (log (n)) или лучшей сложностью для всех модификаций одного элемента (добавить / удалить в начале, конце и до и после любого итератора)
- С постоянством итераторов через любые модификации, кроме прямого уничтожения элемента, указанного итератором.
При желании можно поддерживать доступ по индексу, как в векторе (со стоимостью один размер_т по элементу), со сложностью O (log (n)). При использовании итераторы будут случайными.
При желании порядок может быть обеспечен некоторой функцией сравнения, но постоянство итераторов позволяет использовать неповторяющуюся схему сравнения (например: произвольные полосы движения меняются во время пробок).
На практике сбалансированное бинарное дерево имеет интерфейс вектора, списка, двойного связанного списка, карты, мультикарты, очереди, очереди, priority_queue ... с достижением теоретической оптимальной сложности O (log (n)) для всех операций с одним элементом.
возможно, поэтому c ++ stl не предлагает его
Отдельные лица не могут самостоятельно внедрять общее сбалансированное дерево из-за трудностей с получением правильного управления балансировкой, особенно во время извлечения элементов.
Широко доступной реализации сбалансированного бинарного дерева не существует, потому что в современном уровне техники красное черное дерево (в настоящее время лучший тип сбалансированного дерева из-за фиксированного количества дорогостоящих реорганизаций дерева при удалении) знает реализацию, рабски копируемую каждым реализации из исходного кода изобретателя структуры, не допускает постоянство итератора. Вероятно, это причина отсутствия полностью функционального дерева шаблонов.