再読STLのソースコード解析:マップとセット

マップやRBTreeと呼ばれている一番下の設定

まずルックRBTree

RBTree

赤黒ツリー機能:

1.根は黒

2.新しいノードは赤でなければなりません

3.ノードは、黒または赤の2色のみを有します

4. 2つのノードが同じ赤色にすることはできません

任意のパス5に黒のノードの同数

赤黒ツリーノードの設計:

1.色を表す色変数ノード

2.リンク・ポインタは、左の部分木を残しました

3.右ポインタの右部分木をリンク

4.親ノードリンクの親ポインタ

5 VALUE_FIELD変数ノード値を表すペア設定キーのみでペアのマップに

RBTreeイテレータ:

1.双方向イテレータに属し

プロセスは、バイナリツリーの次のノードを見つけるために実際にある - 2.RBTreeは、イテレータを命じ++とされます

RBTreeデータ構造:

1.ヘッドノード・ヘッダへのポインタ。

最初のノード:

RBTree最初のノードで維持親ノードがツリーのルートノードの最初のノードであるが、ヘッドノードの親ノードは、実際には、ツリーのルートノードです。

ツリー全体の左端ノードの最初のノード、すなわち最小の左側および左ポインタ点

右および右ポインタがツリー全体の右端ノードの最初のノードに、すなわち、最大

2.node_countレコードサイズの木

3.ファンクタの大きさの比較素子

insert_equal()与insert_unique:

等しいまたはすぐに等しい;同一の要素は同一の要素の右側に挿入された場合、例えば右の子ノード9としてinsert_equal RBTreeが同じノードは、インサートが存在することができたときに、現在のノードがダウンして左にある未満であります10があり、インサート10は10で右の子に挿入されています

挿入する挿入ノード位置の親ノードの値場合inert_unique同じ(インサートは空のツリーの特定の位置に挿入された)、挿入位置を見つけた後、同じノードRBTreeに存在させ、介在がありません。

 

セットする

修正することができない、したがって唯一のキー値とノードのセット、および、それ以外の場合はRBTreeの構造を破壊します。

挿入またはイテレータ、このイテレータの追加を削除するときと一致リストのプロパティを設定し、他のイテレータは失敗しません。

底部に赤黒木に設定、赤黒木データ構造変数tがあります。

地図

マップは、ソートキーに従ってソートされた、キーと値の特性を所有することをノード対です

そして、同じに設定し、それはイテレータの挿入や削除に他のイテレータには影響を与えません。

多重集合与マルチマップ

設定およびマルチセット、マップおよび使用mutimapは同じであるが、多重集合とマルチマップinsert_equal使用。

 

おすすめ

転載: www.cnblogs.com/lxy-xf/p/11525381.html