From cppreference.com
template<classKey,classT,classHash,classKeyEqual,classAlloc,classPred>std::unordered_map<Key,T,Hash,KeyEqual,Alloc>::size_typeerase_if(std::unordered_map<Key,T,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_map>voidprintln(autorem,autoconst&container){std::cout<<rem<<'{';for(charsep[]{0,' ',0};constauto&[key,value]:container)std::cout<<sep<<'{'<<key<<", "<<value<<'}',*sep=',';std::cout<<"}\n";}intmain(){std::unordered_map<int,char>data{{1,'a'},{2,'b'},{3,'c'},{4,'d'},{5,'e'},{4,'f'},{5,'g'},{5,'g'},};println("Original:\n",data);constautocount=std::erase_if(data,[](constauto&item){autoconst&[key,value]=item;return(key&1)==1;});println("Erase items with odd keys:\n",data);std::cout<<count<<" items removed.\n";}Possible output:
Original: {{5, e}, {4, d}, {3, c}, {2, b}, {1, a}} Erase items with odd keys: {{4, d}, {2, b}} 3 items removed. See also