STLのmap

 

関連するコンテナ:

キーワードによって順番保存するための要素は、
連想配列をマッピングし、キー保存-値のペアが
あるキー値を設定し、キーワードだけコンテナを保存
繰り返しマルチマップキーワードをマッピング
組多重集合キーワード繰り返し

順不同連想容器
unordered_mapをハッシュ関数に編成マップを使用して、混沌
unordered_setは、ハッシュ関数に組織障害が設定
unordered_multimapハッシュ組織をマッピングし、キーワードを繰り返すことができる
unordered_multisetセットのハッシュ組織を、キーワードを繰り返すことができます

説明:
1、コンテナマップ:マップは、基礎となる赤黒木によって実行される、各ノードは、マップ要素の赤黒木を表します。マップ要素の内部は順序付けされるように、自動選別する機能を有するデータ構造は、コンテナ内の要素の順序は、キー値を比較することによって決定されます。あまり<K>オブジェクト比較デフォルト。

図2に示すように、容器のマルチマップ:容器マップと同様に、マルチマップ唯一の違いは、容器は、同じ重要な要素を保存することができることです。

3、unordered_map容器:ハック(別名ハッシュ)関数によって容器底部は、組織を達成します。要素の順序は、キーによって決定されていないが、キーのハッシュ値によって決定され、ハッシュ値は、ハッシュ関数整数によって生成されます。ハッシュ関数を用いて、キーワードのハッシュ値が同じバケットに同じハッシュ値を持つバケット(バケツ)に配置されます。Unordered_map内部メモリ素子が乱れているが、また、JavaのHashMapに重複キー要素が対応することはできません。

4、unordered_multimapコンテナ:オブジェクトの位置はまた、生成されたハッシュキーの値によって決定することができるが、それは、重複する要素を可能にします。

マッピングおよびマルチマップコンテナテンプレートはマップ・ヘッダ・ファイルで定義され、unordered_mapとunordered_multimap容器をテンプレートは、ヘッダファイルunordered_mapに定義されています。

マルチプレフィックスは、キーがユニークである必要はありません示していますが、この接頭辞を持っていない場合、キーは一意である必要があります。
順不同の接頭辞は、その値によって生成されたハッシュ値がない決定キー、すなわち、コンテナエレメントが不規則さを比較することによって、決定されるコンテナ要素の位置を示します。このプレフィックスがないと、コンテナはそのための重要な要素を比較することによって決定されます。

二、マップ・コンテナ

2.1マップ初始化:
地図<文字列、文字列>著者= {{ "ジョイス"、 "ジェームズ"}、{ "オースティン"、 "ジェーン"}、{ "ディケンズ"、 "チャールズ"}}。

データを挿入2.2
1)INSERT。
地図<文字列、整数> mapStudent; //地図作成
mapStudent.insert(ペア<文字列、整数>( "student_one"、22です));

或者使用make_pair
マップの<string、int型> mapStudent。
mapStudent.insert(make_pair( "student_one"、22))。

2)マップの<string、int型> mapStudent; //创建マップ
mapStudent.insertを(マップ<文字列、整数> :: VALUE_TYPE( "student_one"、22));

3)アレイモード
マップ<文字列、整数> mapStudent; //は、 地図作成
mapStudentを[ "student_one"] = 22です。

3)データアクセスとトラバース

マップと見つける共通のアクセス方法の要素は次のとおりです。
======================================== ==================================================
オペレータ[]アクセス要素は、要素の値の値を変更するために使用されてもよい;下付き文字(キー)要素に存在下または非存在下(キーワードが存在しない場合、すなわち、プログラムが実行されないエラー)、アクセス権をチェックしません、つつ、
キー要素が直接作成した要素を提示していない場合、初期値に戻される(例えば最初のint型として0、0文字列が最初にNULL、NULLが返され、返されている)
も使用することができ、アクセス要素AT要素の値に値を変更し、存在の下付き文字(キー)チェックとなり、キーワードが存在しない場合、例外がout_of_rangeをスローします。
================================================== ========================================
アクセス要素にイテレータを使用
***** ************************************************** ***********************************
地図<K、T> ::イテレータIT;
(IT *) 1次回;(式キーの)//キー値
(IT *).second;(型Tの)//マッピングされた値
(ITは*); // "要素値"(キーCONST一対の種類<、 T>)
キーと値の要素の値は、第一及び第二イテレータ特性です。それはまた、直接イテレータポインタを使用してアクセスすることができます。
IT->まず; //同じAS(IT *)1次回(キー値)
IT-> SECOND; //同じAS(IT *).second(マッピングされた値)

反復子メンバ関数は:
戻り始める容器イテレータの開始位置へのポインタ(イテレータ)
終了コンテナイテレータの最後の位置へのポインタを返す
コンテナの開始位置を指し、通常イテレータ(const_iteratorの)に戻さcbegin
CENDは、多くの場合、容器の端部位置に点を返します反復子(イテレータがしばしば要素へとき全く書き込みアクセスを使用しない)
容器の開始位置を指し、逆イテレータ戻るrbegin(reverse_iterator)
容器終了位置を返すために、逆方向反復子を引き裂く
####### ################################################## ################################
重要な要素があるかどうかを見つけること:
存在する場合COUNT、リターン1;何があります0を返す
要素を指して現在のイテレータが返すポインタは、ノーリターンの終わりがない場合)(検索を

4)マップトラバーサル

①マップを横断するイテレータを使用する前に

マップ<文字列、整数> ::イテレータiterに。
用(ITER = mapStudent.begin();!ITER = mapStudent.end(); ITER ++)
      coutの<< iter->最初<< "" << iter->二<<てendl;

(!; ITER = mapStudent.end(); ITER ++マップの<string、int型> ::イテレータITER = mapStudent.begin())について

     coutの<<(* ITER)1次回<< "" <<(* ITER).second << てendl;

アクセスの両方の形式は、あなたがアクセスに書き込むことができる要素の値の値を変更することができます。

マップの<string、int型> mapStudent; //创建マップ
mapStudentを[ "student_one"] = 22;
mapStudent [ "student_two"] = 25。
mapStudent [ "student_three"] = 21。

マップ<文字列、整数> ::イテレータiterに。
(;; ITER = mapStudent.end()!ITER ++ ITER = mapStudent.begin())のために
(* ITER).second = 100; //将mapStudent中的元素値值全部改为100

用(ITER = mapStudent.begin();!ITER = mapStudent.end(); ITER ++)

     coutの<< iter->最初<< "" << iter->二<< てendl; //遍历

あなたがconst_iteratorのを使用している場合は、二つの方法がアクセスを書き込むことはできません。

②トラバースマップに逆反復子を使用して

地図<文字列、整数> :: A reverse_iterator ITER;
(ITER mapStudent.rbegin =(); ITER mapStudent.rend =();! ITER ++)のための
    COUT << iter->まず<< "" << iter-> SECOND < <てendl; //逆方向移動

③autoキーワード

以下のために(自動それはmapStudent.beginを()=;それを= mapStudent.end();!それを++)

      coutの<< IT->最初<< "" << IT->二<< てendl; //遍历

反復処理する④使用アレイの道

5)データ削除

消去機能を使用します

int型のres = mapStudent.erase( "student_one" ); // 削除の成功リターン1、それ以外の戻り0;キーワードを削除する場合のみだけ戻り値を使用
"= RES" coutのRESを<<を<< <<てendl;

//使用反復子のremove
;地図<文字列、整数> ::イテレータITER
ITER = mapStudent.find( "student_two");
mapStudent.erase(ITER);

//イテレータ要素の範囲を削除
、それはmapStudent.beginを(=自動) ;
mapStudent.erase(IT、mapStudent.find( "student_two"));

三、マルチマップコンテナ

Multimapはコンテナは、注文したキー/値のペアを格納しているが、重複した要素を保存することができます。同じキー要素を持つマルチマップのシーケンスが表示されます。ほとんどのメンバーは、マルチマップを使用し、同じ機能をマッピングします。そのため、重複キーの、関数を使用して、いくつかの違いがあるマップするいくつかの方法があり、マルチマップ。

図1に示すように、要素へのアクセス

キーはユニークな要素を判断できないため、マルチマップ添字演算子は、サポートされていません。そして、同様のマップは、マルチマップは、()関数で使用することはできません。

 

おすすめ

転載: www.cnblogs.com/sunshine1218/p/12081513.html