C++ Std::Map::Erase の例

C Std Map Erase No Li



「std::map」で利用できる多くの操作の中で、「erase」関数は、キーに基づいて要素を削除するための重要なツールとして際立っています。 「std::map」は、キーと値のペアで構成される、組織化された連想コンテナーです。 「std::map」内の要素の配置はキーに従って一貫してソートされ、キー値に基づいた検索、挿入、削除などの効率的な操作が容易になります。

C++ の領域内では、「std::map::erase」関数は「std::map」クラスのメンバー関数として機能し、マップから特定の要素を削除できます。さまざまな形式があり、消去する要素を柔軟に指定できます。この記事では、「std::map::erase」の詳細を掘り下げ、その多用途性を示すために複数の例を示します。







例1:キーによる消去

「std::map」内のキーによって要素を消去する機能は、C++ 標準テンプレート ライブラリによって提供される基本的な機能です。この操作は、プログラム内のキーと値のペアを管理および操作する必要がある場合によく使用され、キーに基づいて特定の要素を削除する便利な方法を提供します。 「std::map」を使用してマップを作成し、キーで要素を消去し、変更されたマップを表示する方法を示すサンプルを作成します。



#include
#include <マップ>

整数メイン ( ) {
std::マップ < int、std::string > マイマップ;
マイマップ [ 1 = '赤' ;
マイマップ [ 2 = '青' ;
マイマップ [ 3 = '緑' ;

myMap.erase ( 2 ) ;

のために ( 定数自動 & ペア: myMap ) {
std::cout << ペア.ファースト << 「:」 << ペア.秒 << std::endl;
}

戻る 0 ;
}


この例では、まず、入出力操作と「std::map」コンテナの使用をそれぞれ有効にするために、 などの必要な C++ 標準ライブラリを含めます。 「main」関数内で、整数キーが対応する文字列値に関連付けられている「myMap」という名前の「std::map」を初期化します。色を表す 3 つのキーと値のペアがマップに追加されます。キー 1 は「赤」、キー 2 は「青」、キー 3 は「緑」です。次に、「」のメンバー関数「erase」を使用します。 std::map” クラスを使用して、マップからキー 2 に関連付けられた要素を削除します。したがって、この操作の後、「青」色はマップの一部ではなくなります。



マップの結果の状態を示すために、「myMap」内の各キーと値のペアを反復する「for」ループを使用します。ループ内で「std::cout」オブジェクトを利用して、各キーと値のペアをコンソールに出力します。最後に、「return 0」ステートメントは、プログラムの実行が成功したことを通知する「main」関数を終了します。





出力には、キー 2 (「青」) を持つ要素が消去された後、「std::map」内の残りのキーと値のペアが表示され、「1: 赤」と「3: 緑」の出力が得られます。



例 2: イテレータによる消去

C++ では、イテレータはコンテナ内の要素のナビゲーションを容易にするオブジェクトであり、要素にアクセス、変更、または削除する手段を提供します。 「std::map::erase」関数を反復子とともに使用して要素を削除することもできます。

以下に例を示します。

#include
#include <マップ>

整数メイン ( ) {
std::マップ < int、std::string > フルーツフォルダー;
フルーツフォルダー [ 1 = 'マンゴー' ;
フルーツフォルダー [ 2 = 'オレンジ' ;
フルーツフォルダー [ 3 = 'パイナップル' ;
フルーツフォルダー [ 4 = 「ぶどう」 ;

auto it = FruitMap.find ( 2 ) ;

もし ( それ = フルーツマップ.終了 ( ) ) {
フルーツマップ.消去 ( それ ) ;
}

のために ( 定数自動 & ペア:フルーツマップ ) {
std::cout << ペア.ファースト << 「:」 << ペア.秒 << std::endl;
}

戻る 0 ;
}


提供された C++ コードは、キーと値のペアを格納するために「fruitMap」という名前の「std::map」を宣言することから始まり、整数を対応するフルーツ名に関連付けます。 「マンゴー」、「オレンジ」、「パインアップル」、「ブドウ」の 4 つの異なる果物のエントリをマップに入力します。その後、「find」関数を使用して、「fruitMap」内のキー値が 2 の要素を指すイテレータ (it) を取得します。次に、反復子が「end()」と等しくないかどうかをチェックして、指定されたキーを持つ要素がマップ内に存在することを確認します。

条件ブロックでは、「erase」関数を使用して、「it」イテレータが指す要素を消去します。最後に、「for」ループを使用して、変更された「fruitMap」の残りの要素を繰り返し処理します。

最終出力には、消去後に変更された「fruitMap」の内容が表示されます。

例 3: 範囲の消去

C++ の「std::map」コンテナは、指定した範囲内の要素を消去する便利な方法を提供します。 「消去」関数を使用すると、削除する範囲の開始と終了を表す反復子に基づいてマップから要素を削除できます。

ここで、「std::map」を使用して範囲を消去する概念を例を挙げて見てみましょう。

#include
#include <マップ>

整数メイン ( ) {
std::マップ < int、std::string > 新しいマップ;
新しい地図 [ 1 = '馬' ;
新しい地図 [ 2 = 'ライオン' ;
新しい地図 [ 3 = '虎' ;
新しい地図 [ 4 = '猫' ;

newMap.erase ( newMap. lower_bound ( 2 ) 、newMap.upper_bound ( 3 ) ) ;

のために ( 定数自動 & ペア: newMap ) {
std::cout << ペア.ファースト << 「:」 << ペア.秒 << std::endl;
}

戻る 0 ;
}


プログラムは、整数キーを対応する文字列値に関連付ける「newMap」という名前の「std::map」を宣言することから始まります。その後、角括弧演算子を使用してマップにキーと値のペアを入力します。たとえば、(1, 'Horse')、(2, 'Lion')、(3, 'Tiger')、および (4, 'Cat') のキーと値のペアを 'newMap' に割り当てます。

次に重要な操作には、反復子を使用してマップから要素を消去することが含まれます。消去関数は、「newMap. lower_bound(2)」および「newMap.upper_bound(3)」引数で使用されます。これにより、範囲 (2, 3) に該当するキーを持つ要素が消去されます。つまり、マップから「ライオン」と「タイガー」のエントリが削除されます。この操作の後、マップには、「Horse」と「Cat」に対応するキー 1 と 4 の要素のみが含まれます。

最後に、範囲ベースの「for」ループを使用して、マップ内の残りの要素を反復処理し、それらのキーと値のペアをコンソールに出力します。

その結果、出力には次のように表示されます。

例 4: 述語に基づく消去

述語に基づく消去とは、指定された条件または基準に基づいてコンテナなどのデータ構造から要素を削除することを指します。 「std::map::erase」を述語関数とともに使用して、要素を条件付きで削除することもできます。次の例を考えてみましょう。

#include
#include <マップ>
#include <アルゴリズム>

整数メイン ( ) {

std::マップ < int、std::string > マイマップ = {
{ 1 '1月' }
{ 2 '2月' }
{ 3 '行進' }
{ 4 「4月」 }
{ 5 '5月' }
} ;

自動述語 = [ ( const std::pair < int、std::string >& 要素 ) {
戻る 要素.秒.長さ ( ) < 5 ;
} ;

myMap.erase ( std::remove_if ( myMap.begin ( ) 、myMap.end ( ) 、述語 ) 、myMap.end ( ) ) ;

std::cout << \n 述語に基づいて要素を削除した後にマップします:' << std::endl;
のために ( 定数自動 & ペア: myMap ) {
std::cout << ペア.ファースト << 「:」 << ペア.秒 << std::endl;
}

戻る 0 ;
}


プログラムは、必要なヘッダー ファイルをインクルードすることから始まります。 「myMap」という「std::map」が「main」関数で宣言され、初期化されます。これには、月の名前とそれぞれの数値を表すキーと値のペアが含まれています。続いて、ラムダ関数(述語)を定義する。この「lambda」関数は、「std::remove_if」アルゴリズムの述語として機能します。マップ要素に関連付けられた文字列値の長さが 5 文字未満であるかどうかを検証します。

次に、「std::remove_if」アルゴリズムが「std::map」の「erase」関数と組み合わせて使用​​されます。この組み合わせでは、述語の有効性に基づいてマップから要素が削除されます。

プログラムを実行すると、キーが 5 未満の要素が元のマップから削除され、「std::map」を使用した述語に基づいた削除が示されます。

結論

結論として、「std::map::erase」関数は、「std::map」から要素を削除する C++ の多用途ツールです。キー、イテレータ、範囲、または述語に基づいて消去する場合でも、「std::map::erase」関数は柔軟性と使いやすさを提供します。この関数を習得することで、C++ 開発者は「std::map」コンテナ内のデータを効率的に管理および操作できるようになり、コードが強化され、保守が容易になります。