map_erase_if
map_erase_if (std::erase_if — 조건에 맞는 원소 일괄 제거)
std::map을 위한 비멤버 함수 std::erase_if예요. 주어진 술어(predicate) pred를 만족하는 모든 원소를 컨테이너에서 제거해요.
출처: cppreference
본문
시그니처는 다음과 같아요.
template< class Key, class T, class Compare, class Alloc, class Pred >
typename std::map<Key, T, Compare, Alloc>::size_type
erase_if( std::map<Key, T, Compare, Alloc>& c, Pred pred ); // (since C++20)
술어 pred는 어떤 원소 e에 대해 bool(pred(e)) 표현식이 true이면 만족된 것으로 봐요. 여기서 e는 c의 어떤 원소예요.
매개변수
c: 원소를 제거할 컨테이너pred: 원소를 제거해야 하면true를 반환하는 술어
반환값
제거된 원소의 개수.
복잡도
c.size()에 선형(linear)이에요.
예제
#include <iostream>
#include <map>
int main()
{
std::map<int, char> data{{1, 'a'}, {2, 'b'}, {3, 'c'}, {4, 'd'}};
auto count = std::erase_if(data, [](const auto& item){
return (item.first & 1) == 1; // 홀수 키 제거
});
std::cout << count << '\n'; // 2
for (auto& [k, v] : data) std::cout << k << ' '; // 2 4
}