マップはいずれか一方を提供する連想コンテナSTLは、(鍵(キー)と呼ぶことができる最初のうちで、各キーワードにだけマップに一度表示されることがあり、第二は、キーワードの値と呼ばれるかもしれませんなぜなら、この特性のデータ処理能力の(値))、我々がファスト・トラック・プログラムに提供するデータのワンタイム処理を完了することが可能です。ここでその組織、自己内蔵赤黒木内の内部マップの次の地図データ(非厳密な意味の一種で平衡二分木)は、ツリーので、自動的にデータをソートする機能を有しているすべてのデータが内部マップであります整然とした。
1、マップのご紹介
マップは連想コンテナのタイプです。動作ノードに加えて、非常に小さく、他のノードに影響を及ぼさないノードイテレータの追加と削除の影響によって特徴付けられます。
イテレータは、実際の値が変更されますが、キーを変更していないことができます。
2、マップ機能
値は対応 - キーが自動的に確立します。キーと値は、必要な任意のタイプにすることができます。
クイック検索キーの値に基づいて、レコード、複雑さが実質的にログです見つける 20倍の最大値を見つけるために10倍の最大値を見つけるために、1000件のレコードが存在する場合、(N)、1,000,000レコード。
キー-Valueはすぐにレコードを挿入します。
クイック削除の記録
レコードの修正値のキー。
すべてのレコードを。
3、マップを使用して
クラスマップヘッダーファイルを含める得るためにマップを使用し
拡張子のないの#include <マップ> // STLヘッダファイルの.h
マップオブジェクトは、テンプレートクラスは、キーワードを保存する必要があり、2つのテンプレートパラメータをオブジェクト:
STD:マップ< int型、文字列>人員;
これは、インデックスとしてint型のポインタを定義し、点の関連付けられた文字列を有しています。
4、マップのコンストラクタ
6つのマップコンストラクタの合計を提供し、これはメモリアロケータのものに関し、以下の表をスキップしていない私たちが言うためにここでは、マップのコンストラクタの一部と接触すると、次のように我々は通常の方法によって構築ということですマップ:
マップ<整数、文字列> mapStudent。
図5に示すように、データの挿入
コンテナ構造マップの後、我々はデータを挿入埋めることができます。ここでは2言及したデータを挿入する方法:
私たちは、あなたが成功したInsert_Pair.secondを挿入している場合はtrueである必要があり、その最初の変数は、マップのイテレータを返し、変数の第二の対が成功を挿入されて知るようになった、とそうでない場合はfalse。
値に対応するキーが既に存在する場合、挿入する方法のためのコード値に対応する再キー 'できない場合、以下を見ることができます
書式#include <iostreamの> の#include <cmath> の#include <アルゴリズム> 書式#include < SET > 書式#include <cstdioを> する#include <地図> 書式#include < 文字列 > の#include <CStringの> / * @author:BK *家族: *時間: * / // 私は、ビーチで遊ぶ子供のようだが、 // 、通常のなめらかな石以上の美しい貝殻を喜ぶよりも多くを拾うために時間までの時間 // と私の前に示されたが、完全に未確認です海の真実 使用 名前空間STD; int型のmain() { 地図 < 整数、文字列 >mapStudent; ペア <マップ< int型、文字列 > ::イテレータ、ブール値 > Insert_Pair。 Insert_Pair = mapStudent.insert(対< 整数、文字列 >(1、" student_one " )); もし(Insert_Pair.second == 真) はcout << " に成功しまし挿入" << てendl; 他の 裁判所未満 << 「失敗を挿入し、」 << てendl; 整数、文字列 >(1、" student_two " )); もし(Insert_Pair.second == 真) はcout << " に成功しまし挿入" << てendl; 他の 裁判所未満 << 「失敗を挿入し、」 << てendl; マップ < int型、文字列 > ::イテレータITER。 用(ITER = mapStudent.begin();!ITER = mapStudent.end(); ITER ++ ) coutの << iter->最初<< " << iter->第<< ENDL。 }
次のコードは、対応するキー値は、第二の方法によってオーバーライドすることができる示し
// 挿入データアレイ形態の効果を確認 する#includeを <地図> の#include < ストリング > の#include <iostreamの> 使用して名前空間STD; int型のmain() { 地図 < 整数、文字列 > mapStudent; mapStudent [ 1。 =] " student_one " 。 mapStudent [ 1 ] = " student_two " ; mapStudent [ 2 ] = " student_three " ; 地図 < int型、文字列 > ::イテレータITER。 用(ITER = mapStudent.begin(); ITER = mapStudent.end();!ITER ++ ) coutの << iter->最初<< ' ' << iter->二<< てendl; }
5、(キーのルックアップで)データを見つけます
ここでは、2つのデータの検索方法は以下のとおりです。
最初:count関数を持つキーワードが表示されたかどうかを判断するために、欠点は、データの位置を表示さ見つけることができないマップの特性により、1つのマッピング関係への1つ、2つだけのカウントの関数の戻り値を決定し、どちらか0であります1のいずれか、たまたま、当然のことながら、リターン1であります
第二:位置データを検索する検索機能を使用するが存在する場合、それは最後まで同じイテレータを返し、データが存在する場合に地図データを検索したくない場合、それは、データが配置されているイテレータを返し、イテレータを返しますこの関数はイテレータを返します。
書式#include <マップ> 書式#include < 文字列 > の#include <iostreamの> 使用して名前空間はstdを、 INT メイン() { マップ < 整数、文字列 > mapStudent。 mapStudent.insert(対 < 整数、文字列 >(1、" student_one " )); mapStudent.insert(対 < 整数、文字列 >(2、" student_two " )); mapStudent.insert(ペア < int型、文字列 >(3。 、" student_three " )); 地図 < int型、文字列 > ::イテレータITER; ITER = mapStudent.find(1。); IF(= mapStudent.end ITER()!)// キーが存在していないときにデータの最後の繰り返しを返し coutの << 「検索値では、ある」 << iter-> SECOND、<< ; ENDL 他の 裁判所未満 << 「しないでください検索」 << てendl; リターン 0 ; }
マップ・オブジェクトにより取得されたデータのイテレータ型は、メソッドのstd ::ペアオブジェクト、保存されたデータと二つのデータを表すiterator->第iterator->第2のキーを備えています。
図6に示すように、マップから要素を削除
消去(のエントリでマップを削除するには)
次のように部材の方法が定義されます。
イテレータの消去(イテレータit); //件名でエントリを削除
イテレータ消去(最初のイテレータ、イテレータ最後は)//範囲を削除します
size_type消去(定数キー&キー); //キーワードを削除
クリア()と等価enumMap.erase(enumMap.begin()、enumMap.end())。
7、それについて話を並べ替えた後、