From cppreference.com
template<classKey,classHash,classKeyEqual,classAlloc,classPred>std::unordered_set<Key,Hash,KeyEqual,Alloc>::size_typeerase_if(std::unordered_set<Key,Hash,KeyEqual,Alloc>&c,Predpred);(since C++20)Erases all elements that satisfy the predicate pred from c.
Equivalent to
autoold_size=c.size();for(autofirst=c.begin(),last=c.end();first!=last;){if(pred(*first))first=c.erase(first);else++first;}returnold_size-c.size();Parameters
c - container from which to erase pred - predicate that returns true if the element should be erased Return value
The number of erased elements.
Complexity
Linear.
Example
Run this code
#include<iostream>#include<unordered_set>voidprintln(autorem,autoconst&container){std::cout<<rem<<'{';for(charsep[]{0,' ',0};constauto&item:container)std::cout<<sep<<item,*sep=',';std::cout<<"}\n";}intmain(){std::unordered_setdata{3,3,4,5,5,6,6,7,2,1,0};println("Original:\n",data);autodivisible_by_3=[](autoconst&x){return(x%3)==0;};constautocount=std::erase_if(data,divisible_by_3);println("Erase all items divisible by 3:\n",data);std::cout<<count<<" items erased.\n";}Possible output:
Original: {0, 1, 2, 7, 6, 5, 4, 3} Erase all items divisible by 3: {1, 2, 7, 5, 4} 3 items erased. See also