>>144
template <typename key_type, typename mapped_type, typename map_type>
void remove_kv(map_type& mm, const key_type& key, const mapped_type& value)
{
    typename map_type::iterator first = mm.lower_bound(key), last = mm.upper_bound(key);
    while (first != last)
        if (first->second == value)
            mm.erase(first++);
        else
            ++first;
}