C++(四十九) — set、multiset 容器的基本操作

 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、過負荷「()」演算子

[CPP]   ビュー無地 コピー  
 
  1. 構造体MYCOMP  
  2. {  
  3.     ブール演算子()(CONST your_type&、CONST your_type&B)  
  4.     [  
  5.         0> a.data-b.data返します。  
  6.     }  
  7. }  
  8. <設定INT、MYCOMP> S;  
  9. ......  
  10. <設定INT、MYCOMP> ::イテレータit。  

    要素は、構造(2)である場合、比較関数は、構造体に直接書き込むことができます。
        例:

[CPP]   ビュー無地 コピー  
 
    1. 構造体情報  
    2. {  
    3.     文字列名。  
    4.     フロートスコア;  
    5.     //過負荷「<」演算子、カスタム照合  
    6.     ブール演算子<(constの情報&A)  のconst  
    7.     {  
    8.         //スコアで降順  
    9.         a.score <スコアを返します。  
    10.     }  
    11. }  
    12. <情報> Sを設定します。  
    13. ......  
    14. <情報>を設定::イテレータit。  

 

 

 

 参考ブログます。https://blog.csdn.net/xiajun07061225/article/details/7459206

     https://www.cnblogs.com/ChinaHook/p/6985444.html#top

 

 

 

おすすめ

転載: www.cnblogs.com/eilearn/p/10992783.html