If you have a sorted map of key/value pairs (or just keys), one of the obvious operations is to get the first or last pair (or key).
C++'s std::vector
has front()
and back()
for this purpose. std::map
doesn't, but *map.begin()
and *map.rbegin()
(reverse iterator) work for this (assuming one knows the map is not empty).
In Rust, getting the first element of a map seems to require map.iter().next().unwrap()
— ugly, but perhaps justified considering some error checking is needed.
How can we get the last element? By stepping over all elements: map.iter().last().unwrap()
?
I see that there is Iterator::rev()
, so is map.iter().rev().next().unwrap()
a reasonable alternative?
btree_map::Iter
, which is returned by BTreeMap::iter()
, implements DoubleEndedIterator
, so indeed, either the approach with rev()
would work or you can use the next_back()
method directly:
let (key, value) = map.iter().next_back().unwrap();
https://github.com/rust-lang/rust/issues/31690#issuecomment-184445033
A dedicated method would improve discoverability, but you can do:
let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
and the same for BTreeSet.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With