BTreeMap/VecMap中的最后一项(`back()`)

dha*_*rdy 4 b-tree rust

如果您有一个键/值对的排序映射(或只是键),其中一个明显的操作是获取第一个或最后一个(或键).

C++的std::vector方便了front()back()用于这一目的.std::map没有,但是*map.begin()*map.rbegin()(反向迭代器),用于这方面的工作(假定人知道地图不为空).

在Rust中,获取地图的第一个元素似乎需要map.iter().next().unwrap()- 丑陋,但考虑到需要进行一些错误检查可能是合理的.

但是我们怎样才能获得最后一个元素呢?通过加强对所有元素:map.iter().last().unwrap()

我知道有Iterator::rev(),map.iter().rev().next().unwrap()合理的替代方案呢?

Vla*_*eev 9

它看起来像btree_map::Iter,这是由返回BTreeMap::iter(),器具DoubleEndedIterator,所以的确,无论是与该方法rev()会工作,或者你可以用next_back()直接的方法:

let (key, value) = map.iter().next_back().unwrap();
Run Code Online (Sandbox Code Playgroud)

事实上,它确实有效.