最終更新日時: 2026年02月17日 23時22分33秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<flat_map>

# std::erase_if(C++23)

    namespace std {
      template<class Key,
               class T,
               class Compare,
               class KeyContainer,
               class MappedContainer,
               class Predicate>
      typename flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>::size_type
        erase_if(flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>& c,
                 Predicate pred); // (1) C++23
      template<class Key,
               class T,
               class Compare,
               class KeyContainer,
               class MappedContainer,
               class Predicate>
      constexpr typename flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>::size_type
        erase_if(flat_multimap<Key, T, Compare, KeyContainer, MappedContainer>& c,
                 Predicate pred); // (1) C++26
    }

## 概要

指定した条件に合致する要素とその分の領域を、コンテナから削除する。

述語関数オブジェクトには、キーではなく、要素全体 (キーと値の`pair`) が渡されるので注意。

## 事前条件

- `Key`と`T`がムーブ代入可能であること

## 効果

メンバ変数として保持しているコンテナ`c`の各要素`e`について、`bool(pred(pair<const Key&, const T&>(e)))`を`E`として、`E`が`true`であるすべての要素を削除する。

## 戻り値

削除した要素数を返す。

## 計算量

正確に`size()`回だけ述語適用する。

## 例

    #include <flat_map>
    #include <iostream>
    #include <string>

    int main()
    {
      std::flat_multimap<std::string, int> fm = {
        {"A", 3},
        {"B", 1},
        {"B", 4},
        {"C", 5}
      };

      // コンテナfmから、キーが"B"の要素をすべて削除する
      auto num = std::erase_if(fm, [](const auto& x) { return x.first == "B"; });

      std::cout << num << std::endl
                << std::endl;

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

### 出力

    2

    A : 3
    C : 5

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 参照

- P3372R3 constexpr containers and adaptors