set_erase_if

set_erase_if (std::erase_if — 조건에 맞는 원소 일괄 제거)

std::set을 위한 비멤버 함수 std::erase_if예요. 주어진 술어(predicate) pred를 만족하는 모든 원소를 컨테이너에서 제거해요.

출처: cppreference

본문

시그니처는 다음과 같아요.

template< class Key, class Compare, class Alloc, class Pred >
typename std::set<Key, Compare, Alloc>::size_type
    erase_if( std::set<Key, Compare, Alloc>& c, Pred pred );   // (since C++20)

술어 pred는 어떤 원소 e에 대해 bool(pred(e)) 표현식이 true이면 만족된 것으로 봐요. 여기서 ec의 어떤 원소예요.

매개변수

  • c: 원소를 제거할 컨테이너
  • pred: 원소를 제거해야 하면 true를 반환하는 술어

반환값

제거된 원소의 개수.

복잡도

c.size()에 선형(linear)이에요.

예제

#include <iostream>
#include <set>
int main()
{
    std::set<int> data{1, 2, 3, 4};
    std::erase_if(data, [](int x){ return x % 2 == 1; });
    for (int x : data) std::cout << x << ' ';   // 2 4
}

더 알아보기 (Learn more)

cppreference