最終更新日時(UTC):
が更新

履歴 編集

function
<flat_map>

std::flat_map::erase(C++23)

iterator erase(iterator position);                         // (1) C++23

iterator erase(const_iterator position);                   // (2) C++23

size_type erase(const key_type& x);                        // (3) C++23

template <class K>
size_type erase(K&& x);                                    // (4) C++23

iterator erase(const_iterator first, const_iterator last); // (5) C++23

概要

単一要素またはイテレータ範囲[first, last)を コンテナから削除する。

これは削除された要素の数だけコンテナの size を減らし、それぞれの要素のデストラクタを呼び出す。

  • (1) : 指定されたイテレータが指す要素を削除する
  • (2) : 指定された読み取り専用イテレータが指す要素を削除する
  • (3) : 指定されたキーをもつ要素を削除する
  • (4) : key_typeと比較可能なK型のキーを受け取って要素を削除する
  • (5) : 指定されたイテレータ範囲の要素をすべて削除する

パラメータ

  • position : 削除する単一要素を指すイテレータ。iterator はメンバ型であり、双方向イテレータとして定義される。
  • x : 削除する値のキー。key_type はメンバ型であり、コンテナの中で Key の別名として定義される。ここで Key は 1 番目のテンプレートパラメータであり、コンテナに格納される要素のキーの型である。
  • first, last : 削除するイテレータ範囲 [first, last) を指定するイテレータ。ここでいう範囲は firstlast の間の全ての要素を含み、first が指す要素を含むが last が指す要素は含まない。

戻り値

  • (1), (2), (5) : 削除された要素の次を指すイテレータを返す。そのような要素がない場合、end()を返す (要素を削除した結果としてコンテナが空になった場合)
  • (3), (4) : 削除された要素の数を返す。

計算量

  • (1), (2) : 定数時間
  • (3), (4) : コンテナの size() について対数時間
  • (5) : コンテナの size() について対数時間、それに加えて firstlast の間の距離に対する線形時間

備考

  • (1), (2) : この関数に、範囲外のイテレータ (終端イテレータを含む) を指定した場合の動作は未定義

基本的な使い方 (C++23)

#include <iostream>
#include <flat_map>

int main()
{
  std::flat_map<int, char> fm = {
    {1, 'A'},
    {2, 'B'},
    {3, 'C'}
  };

  std::cout << fm.size() << std::endl;

  fm.erase(1);
  std::cout << fm.size() << std::endl;

  fm.erase(fm.begin(), fm.end());
  std::cout << fm.size() << std::endl;
}

出力

3
2
0

イテレート中に要素を削除する (C++23)

#include <iostream>
#include <flat_map>

int main()
{
  std::flat_map<int, char> fm = {
    {3, 'a'},
    {1, 'b'},
    {4, 'c'}
  };

  // イテレート中に要素削除をするような場合には、
  // 範囲for文は使用できない
  for (auto it = fm.begin(); it != fm.end();) {
    // 条件一致した要素を削除する
    if (it->first == 1) {
      // 削除された要素の次を指すイテレータが返される。
      it = fm.erase(it);
    }
    // 要素削除をしない場合に、イテレータを進める
    else {
      ++it;
    }
  }

  for (const auto& [key, value] : fm) {
    std::cout << key << ':' << value << std::endl;
  }
}

出力

3:a
4:c

バージョン

言語

  • C++23

処理系

関連項目

名前 説明
flat_map::clear 全ての要素を削除する
flat_map::insert 要素を挿入する
flat_map::find 指定したキーで要素を探す