たとえそうでなくても、質問がバランスの取れた (何らかの形で、ほとんどが赤黒木) 二分木に関するものであるとします。
ベクトルのようなバランスのとれた二分木は、キーを必要とせずに要素の順序付けを管理することを可能にします (ベクトル内の任意の場所に要素を挿入するなど)。
- 1 つの要素のすべての変更に対して最適な O(log(n)) またはそれ以上の複雑さ (開始、終了、イテレータの前後で追加/削除)
- イテレータが指す要素の直接的な破壊を除いて、あらゆる変更を通じてイテレータを永続化します。
必要に応じて、O(log(n)) の複雑さで、ベクトル (要素ごとに 1 size_t のコスト) のようにインデックスによるアクセスをサポートすることができます。使用すると、反復子はランダムになります。
オプションで、いくつかの比較関数によって順序を強制できますが、イテレータの永続性により、繰り返し不可能な比較スキームを使用できます (例: 交通渋滞中に任意の車線が変更されます)。
実際には、バランスの取れたバイナリ ツリーには、ベクトル、リスト、ダブル リンク リスト、マップ、マルチマップ、デキュー、キュー、priority_queue... のインターフェイスがあり、すべての単一要素操作に対して理論的に最適な O(log(n)) の複雑さを達成します。
<皮肉> これがおそらく c++ stl がそれを提案しない理由です </皮肉>
個人は、特に要素の抽出時にバランスを正しく管理することが難しいため、一般的なバランス ツリーを自分で実装することはできません。
バランスの取れたバイナリ ツリーの広く利用可能な実装はありません。これは、最先端のレッド ブラック ツリー (現時点では、除去中のコストのかかるツリーの再編成の回数が固定されているため、バランスのとれたツリーの最適なタイプ) が実装を認識しており、すべての実装者によって惜しみなくコピーされているためです。構造発明者の初期コードでは、反復子の永続性が許可されていません。これはおそらく、完全に機能するツリー テンプレートがないことの理由です。