C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのmap::erase()関数の使い方とサンプルコード解説

この記事では、C++ STLにおけるmap::erase()関数の動作、構文、および具体的な使用例について詳しく解説します。

C++ STLにおけるマップ(map)とは?

マップは連想コンテナの一種で、キー(key)とマップ値(mapped value)の組み合わせからなる要素を、特定の順序で格納することができます。マップコンテナ内のデータは常にキーに基づいて内部的にソートされており、各要素には一意のキーを通じてアクセスします。

map::erase()関数とは?

map::erase()は、<map>ヘッダーファイルに定義されている関数で、マップコンテナから特定の要素、または指定した範囲の要素を削除するために使用されます。キーを指定して要素を削除することも可能です。

この関数を呼び出すと、削除された要素の数だけマップコンテナのサイズが減少します。

構文

map_name.erase(iterator pos);
map_name.erase(key_type& k);
map_name.erase(iterator start, iterator end);

パラメータ

この関数は、以下のパラメータを受け取ります。

  • pos − 削除する要素の位置を示すイテレータ。
  • k − マップコンテナから削除したい要素のキー値。
  • start, end − 削除したい範囲の開始位置と終了位置を指定するイテレータ。

戻り値

キーを指定した場合、削除が成功すると削除した要素数(1)が返され、該当する要素が存在しない場合は0が返されます。イテレータを指定した場合は、削除された要素の次の要素を指すイテレータが返されます。

使用例

基本的な使い方

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap.erase('b');
// 実行後、マップには 'a' のみが残る

サンプルコード1:キーを指定して削除

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.emplace(3, 50);
    TP_Map.emplace(2, 30);
    TP_Map.emplace(1, 10);
    TP_Map.emplace(4, 70);
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    // マップの要素を削除する
    TP_Map.erase(1);
    TP_Map.erase(2);
    cout<<"\n\nAfter erasing the element: \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

出力

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70
After erasing the element:
MAP_KEY    MAP_ELEMENT
3          50
4          70

サンプルコード2:イテレータを指定して削除

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    // マップの要素を削除する
    auto var = TP_Map.find(1);
    TP_Map.erase(var);
    auto var_1 = TP_Map.find(2);
    TP_Map.erase(var_1);
    cout<<"\n\nAfter erasing the element: \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

出力

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70
After erasing the element:
MAP_KEY    MAP_ELEMENT
3          50
4          70

まとめ

map::erase()関数を使えば、キー指定・イテレータ指定・範囲指定の3つの方法でマップから要素を削除できます。用途に応じて適切なオーバーロードを選択することで、効率的にコンテナを操作できます。要素を削除する前にfind()で位置を確認しておくと、意図しない削除を防ぐことができます。

  1. C++ STL list::erase() 関数の完全ガイド

    この記事では、C++ STL の list::erase() 関数の動作、構文、使用例について解説します。 STL における List とは std::list は、シーケンスの任意の位置への要素の挿入と削除を定数時間で行えるデータ構造です。内部的には 双方向連結リスト として実装されており、メモリ上では非連続な領域に要素が配置されます。 配列、vector、deque と比較して、任意の位置への挿入・削除・要素の移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅く、イテレータを用いた順次アクセスが基本となります。forward_list(単

  2. C++ STLのiswctype()関数とは?使い方とサンプルコードをわかりやすく解説

    C++の標準テンプレートライブラリ(STL)において、iswctype()関数は、指定されたワイド文字が引数descで示されるプロパティ(文字分類)を持っているかどうかを判定するために使用されます。iswctype()は組み込み関数であり、ヘッダーファイル「wctype.h」(C++では「cwctype」)で宣言されています。iswctype()関数の構文int iswctype(wint_t c, wctype_t desc);この関数は、ワイド文字cがdescで指定されたプロパティを持つかどうかをチェックします。パラメータ(引数)c … 判定対象となるワイド文字です。整数型wint_tにキ