Removing range of elements from BTreeMap

Going back to the original question, and related topics, I see these related methods:

  • drain(range), equivalent to Vec::drain(range) if you consider a Vec<T> to be a BTreeMap<usize, T> with consecutive keys.
  • drain(), equivalent to HashMap::drain(), a shortcut to mem::take(&mut self).into_iter(). This is equivalent to Vec::drain(..) but not quite equivalent to BTreeMap::drain(..).
  • split_off(range): a drain(range) that returns a new map instead of merely iterating it. This is not just a generalization of drain(range), because a map has more constraints to comply with than an iterator. It could be accomplished by a Drain::into_map method, but that's also not ideal: the iterator Drain descends to the first leaf node to start iteration, and into_map would need to back up to the root. The existing split_off(key) is equivalent to split_off(key..). A desired variant is split_off((Excluded(key), Unbounded)).

The problem now is getting the names right. Both of the names above are overloaded thus impossible. split_off(key) is stable I don't see an alternative to split_off_range(range). Should it be drain_range(range), which also seems more fair against drain_filter? And/or should we forget about a separate drain()?