1、知識の基本セット
特性が設定されている:すべての要素の要素キー自動選別を、設定されたマップ要素が同時に真の値(値)と鍵(キー)を持つことができないように、重要な要素は、実際の設定値であり、値が実数キー。セットには、二つの要素が同じキーを持って許可されていません。
以下のように設定した機能のメンバーリスト:
1)(開始:イテレータの最初の要素へのポインタを返し、終了():イテレータの最後の要素へのポインタを返します。
2.empty():コレクションが空の場合、trueを返します;クリア():クリアすべての要素。
3.消去():コレクション要素を削除します。
- (イテレータ)を消去:値ロケータイテレータポインティングを削除します
- (第一、第二)を消去第1及び第2のロケータとの間の値を削除
- (KEY_VALUE)消去:キーKEY_VALUEの値を削除します。
4.カウント(は):一定値、0または1の要素の数を返します。
5.検索()は:戻り端を見つけていない場合、要素のうち見出さイテレータへのポインタを返します()。
6. INSERT():関数の戻り値が挿入され、セット内の要素を挿入同一ではありません。
- INSERT(KEY_VALUE);セットに挿入KEY_VALUEは、戻り値はペア<設定<整数> ::イテレータ、BOOL>、BOOLは、次いで、KEY_VALUEもし既にセットに成功挿入、代表的なイテレータの挿入位置を示しますKEY_VALUE反復子は、セット内の位置を示しています。
- (第一、第二)からのインセット、第二の組との間に挿入される第一位置決め要素、戻り値は無効です。
-
セット挿入機能を提供します:
対<反復子、BOOL>インサート(CONST VALUE_TYPE&ELEM)。
イテレータインサート(イテレータpos_hint、CONST VALUE_TYPE&ELEM)。 -
多重集合挿入機能を提供します:
イテレータ挿入(のconst VALUE_TYPE&elemは)。
イテレータインサート(イテレータpos_hint、CONST VALUE_TYPE&ELEM)。
値の型が異なる理由で返し繰り返し要素を許可しない設定、マルチセットができました。要素が既に同じ値が含まれている要素の集合に挿入される場合、挿入は失敗します。新しい要素を返す、または要素の存在位置の同じ値を返すように第1の素子の位置:したがって、タイプ値は2つのペアによって編成され、戻り値を設定します。第二の要素は、挿入が成功した表します。
2番目の挿入機能セットは、挿入が失敗した場合、要素のリターンの位置のみを複製します!しかし、この関数は、すべての挿入位置は、パラメータ値の型が同じであるよう求めているが返されます。これは、少なくとも挿入の汎用機能を有することを保証する、共通のインターフェイスにおけるコンテナの様々ながあります。
7. LOWER_BOUND(KEY_VALUE)は:以上KEY_VALUE最初のロケータを返し、UPPER_BOUND、(KEY_VALUE)、 KEY_VALUEより大きい最後ロケータを返します
8.サイズ()セット内の要素の数。
9. MAX_SIZE():上限を収容することができる要素のコレクションを返します
10.スワップ():交換などの二組の変数、:c1.swap(C2)、スワップ(C1、C2)。
11. rbegin():リバースイテレータ要素;.の最後のセットへのポインタを返す)レンド(:設定リバースイテレータの最初の要素へのポインタを返します
12. equal_rangeは() - 上限値が基準に等しい2回の反復子のコレクションを返します
13. get_allocatorは() - ディスペンサーのセットを返します
14. key_compは() - のための要素間の関数値比較を返します
15. UPPER_BOUNDは() - 反復子の要素よりも大きな値を返します
16. value_comp() - 比較要素との間の値を返す関数
リバースイテレータ:セット<整数> :: reverse_iterator
以下の質問に設定があります。
(1)挿入および欠失効率マップとは、他の配列の容器よりも高く設定なぜ?
連想コンテナのために、メモリおよびメモリの動きをコピーする必要はありませんので、ほとんどの人は、非常に単純に、と言います。右、それがあります。すべての要素は、親と子ノードを指し、ほぼリストノード構造を連結した方法で記憶ノードに容器内にセットされています。次のように図の構成であってもよいです。
/ \
BC
/ \ / \
DEFG
したがって、変換の挿入わずかしか、新しいノードへのポインタをノードとすることができます。同様に、OK他のノードにノードポインタを削除するために指すようにわずかに変換した後、除去されます。ここにすべてが行くと引き換えにポインタ操作で、携帯メモリは重要ではありません。
(2)なぜ各挿入した後、以前に保存されたイテレータは失敗しないのだろうか?
ここでの反復子はノードへのポインタに相当し、メモリはメモリへのポインタが(削除要素自体の有効期限が切れていることを、当然のことながら)それを失敗するか、変更されていません。、ベクトルへの相対インサートと、すべてのポインタを削除が失敗する可能性があり、コール一backインサートは最後でも同様です。内部データとして格納されている連続を保証するために、そのメモリの取り外しと挿入プロセスにイテレータ点は、メモリまたは他のメモリが解放された被覆されていてもよいです。場合でも、容器の内部を新しいメモリに既存のデータ要素をコピーし、新しいより多くのメモリを申請し、新しい、より大きなメモリ、以前のリリースの唯一のメモリを必要としないかもしれない一back、最終的に必要性要素が自然に利用可能でない最終、前者メモリポインタに挿入しました。具体的には、一緒に使用すると、心の中でこの原則を支持、アルゴリズムを見つけたとき:期限切れのイテレータを使用しないでください。
(3)データ要素の増加は、どのように挿入し、検索速度の変更を設定した場合?
あなたはLOG2との関係を知っているなら、あなたは完全に答えを理解しておく必要があります。このセットでの検索は16の要素がある場合は、5回まで比較し、32個の要素があり、その結果を見つけるために、4回まで比較する必要がある、つまり、バイナリ検索を使用しています。だから、10 000は何がありますか?最大数は、20個の000の要素である場合、14回まで、log10000と比較しますか?しかし、最大15倍。倍加時間データの量、検索数が、複数回、そしてより多くの時間が唯一の1/14を検索するときに、参照してください。あなたがこれを理解した後は、安全の要素に入力することができます。
また、それは始まりに注意してください()とend()関数は、セットが空であるかどうかをチェックしません空使用する前に、最高の使用を()セットが空であるかどうかを確認します。
(4)セットとマルチセットは、通常、赤黒木は、長所と短所が完了しますか?
すべての連想コンテナと類似したが、一般的にバランスの取れたバイナリツリーを完了するために使用されます。実際、設定、および黒の木の実装から一般的に多重集合。対数時間の複雑さを持つ要素を検索するときに自動仕分け利点は、その優れた性能です。しかし、欠点が原因で発生します。
- あなたは直接の要素の値を変更することはできません。それは、既成の秩序を混乱させるだろうので。
- 要素の値を変更する方法は以下のとおりです。新しい要素を挿入し、古い要素を削除します。
- 唯一の観点からアクセス要素イテレータ、イテレータを介して、要素が一定値です。
2、カスタム比較関数を設定します
カスタム比較関数
(1)要素が構造ではない。
例:
//カスタム比較関数MYCOMP、過負荷「()」演算子
- 構造体MYCOMP
- {
- ブール演算子()(CONST your_type&、CONST your_type&B)
- [
- 0> a.data-b.data返します。
- }
- }
- <設定INT、MYCOMP> S;
- ......
- <設定INT、MYCOMP> ::イテレータit。
要素は、構造(2)である場合、比較関数は、構造体に直接書き込むことができます。
例:
- 構造体情報
- {
- 文字列名。
- フロートスコア;
- //過負荷「<」演算子、カスタム照合
- ブール演算子<(constの情報&A) のconst
- {
- //スコアで降順
- a.score <スコアを返します。
- }
- }
- <情報> Sを設定します。
- ......
- <情報>を設定::イテレータit。
参考ブログます。https://blog.csdn.net/xiajun07061225/article/details/7459206
https://www.cnblogs.com/ChinaHook/p/6985444.html#top