指定された値を削除する方法を見てください
コードは以下の通りであります:
用(int型 I = 0 ; Iはvec.sizeを()<++ I) { IF(vec.at(I)== 2 ) { vec.erase(vec.begin() + I)、 I - 。// 以来現在の値を削除し、自動的にいっぱいになり得られた値は、それは、I-1に必要私は、次の値をスキップ++た後、これらのかどうか値を削除されます } }
nの値を削除するために使用される地図の下にアレイの繰り返しの数よりも大きいです
最初のマップに導入:
すべての要素が自動的に重要な要素に応じてソートされている特性マップ。マップのすべての要素はペアである、また、実際の値(値)と鍵(キー)を持っています。ペアの最初の要素は2番目の要素は実数値として扱われ、キーとして理解されます。マップには二つの要素が同じキーを持って許可していません。
ペア<stl_pair.h>の定義では、次の見て:
テンプレート< クラス T1、クラス T2> 構造体ペア{ T1のfirst_typeのtypedef。 T2のsecond_typeのtypedef。 最初のT1。// 注意、它是公共 T2秒。// 注意、它是パブリック ペア():最初の(T1())、第二(T2()){} ペア(CONST T1と、CONST T2&B):最初の(A)、第二(B){} }。
元素マップ新しい操作(挿入)と削除(消去)、操作の前にすべてのイテレータは、まだ有効である場合には操作が完了した後。削除されたイテレータを除きます。
標準STLマップは、基礎となるメカニズムが完了すると、各ノードの内容は対である赤黒木です。
実質上、地図のコンストラクタ
マップ< 文字列、int型 > strMap。 マップ < int型、文字列 > intMap。 マップ < 文字列、文字 > strMap。 マップ < 文字、文字列 > のcharmap。 マップ < 文字、int型 > のcharmap。 マップ < int型、char型 > intMap。
二、マップはデータを追加します
マップ< int型、文字列 > maplive。
1 .pair < 整数、文字列 >値(1、" A " ); maplive.insert(値); 等价于maplive.insert(対 < 整数、文字列 >(1、" A " )); 2。maplive.insert(マップ< int型、文字列 > :: VALUE_TYPE(1、" A " )); 3。[maplive 1 ] = " Aを"。// 最も単純で最も一般的に使用される挿入ADDの地図!
三、基本的な操作機能をマッピングします。
開始()マップの先頭を指すポインタを返しますが、イテレータ (クリア)すべての要素が削除されます )(カウントは数指定した要素が表示されます返します (空)が返す場合にtrue空のマップで 終了)(マップイテレータの末尾へのポインタを返す ()を返しますequal_rangeする特定のアイテムをイテレータ 消去()要素の削除 要素を見つけるために検索を() マップコンフィギュレータ戻る)(get_allocatorを インサート()要素を挿入 key_compは()関数は、比較の重要な要素を返し LOWER_BOUND()をキー値を返す > = 与えられました位置の最初の要素 MAX_SIZEは()要素の最大数を収容することができる返し )rbegin(逆マップイテレータの末尾へのポインタを返す )(レンドリバースイテレータマップの先頭へのポインタを返す )(サイズマップの要素を返します多くの スワップ()は、2つのマップを交換 UPPER_BOUNDは、()キーを返し >与えられた要素の最初の位置に value_comp()関数は、比較要素の値を返します
次のように配列の繰り返し数を削除するには、nの値よりも大きいです
#include <iostreamの> する#include <CStringの> する#include <ベクトル> の#include <地図> 使用して 名前空間STD。 INT のmain(){ int型 N、倍。// nは为输入N个数、倍为限定次数 CIN >> N >> 倍。 ベクトル < int型 > VEC; 以下のために(int型 = Iを0 ; iがn <; ++ I) { int型TMP。 cinを >> TMP; vec.push_back(TMP)。 } マップ < INT、INT> MAPT; 用(int型 iは= 0 ; iが(vec.sizeを<)++ I) { 場合(!mapT.end()= mapT.find(vec.at(I))) MAPT [vec.at(I)] ++ ; 他 { MAPT [vec.at(I)] = 1 。 } } オートITER = mapT.begin()。 用(;!ITER = mapT.end(); ++ ITER) はcout << " キー= " << iter->最初<< " 値= " << iter->二<<endl; 以下のために(int型 iは= 0 ; iは<vec.size(); ++ I) { 場合(mapT.find(vec.at(I)) - >第二> = 回) { vec.erase(vec.begin() + I)。 I - ; } } のための(int型 I = 0 ; iが(vec.sizeを<)++ I) { COUT << vec.at(I)<< ' ' 。 } COUT << ENDL。 // マップ<int型、int型> MAPT。 //mapT.insert(対<整数、整数>(2,5))。 // MAPT [3] 5 =。 // MAPT [3] ++; // 自動ITER = mapT.begin(); // 用(; ITER = mapT.end();!++ ITER) // coutの<< "キー=" << iter->最初<< "値=" << iter->二<<てendl; システム(「一時停止」)。 リターン 0 ; }
結果: