GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — std::erase_if - cpprefjp C++日本語リファレンス

  1. リファレンス
  2. unordered_set
  3. unordered_multiset
  4. erase_if

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

履歴 編集

function template
<unordered_set>

std::erase_if(C++20)

namespace std {
  template <class K, class H, class P, class A, class Predicate>
  typename unordered_multiset<K, H, P, A>::size_type
    erase_if(unordered_multiset<K, H, P, A>& c, Predicate pred); // (1) C++20
  template <class K, class H, class P, class A, class Predicate>
  constexpr typename unordered_multiset<K, H, P, A>::size_type
    erase_if(unordered_multiset<K, H, P, A>& c, Predicate pred); // (1) C++26
}

概要

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

効果

以下と等価:

auto original_size = c.size();
for (auto i = c.begin(), last = c.end(); i != last;) {
  if (pred(*i)) {
    i = c.erase(i);
  } else {
    ++i;
  }
}
return original_size - c.size();

戻り値

削除した要素数を返す。

例

#include <iostream>
#include <unordered_set>

int main()
{
  std::unordered_multiset<int> us = {3, 1, 4, 1};

  // コンテナusから、キー1をもつ要素をすべて削除する
  std::erase_if(us, [](int x) { return x == 1; });

  for (int x : us) {
    std::cout << x << std::endl;
  }
}

出力例

4
3

バージョン

言語

  • C++20

処理系

  • Clang: 8.0 ✅
  • GCC: 9.1 ✅
  • Visual C++: ??

参照

  • P1209R0 Adopt consistent container erasure from Library Fundamentals 2
  • R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free erase/erase_if
  • P3372R3 constexpr containers and adaptors
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.