Rust 如何获取BTreeMap中的最后一项?

Rust 如何获取BTreeMap中的最后一项?,rust,b-tree,Rust,B Tree,如果您有键/值对(或仅键)的排序映射,其中一个明显的操作是获取第一对或最后一对(或键) 为此,C++有front()和back()。没有,但是*map.begin()和*map.rbegin()(反向迭代器)可以实现这一点(假设知道映射不是空的) 在Rust中,获取映射的第一个元素似乎需要map.iter().next().unwrap()-丑陋,但考虑到需要进行一些错误检查,这可能是合理的 我们怎样才能得到最后一个元素?通过单步遍历所有元素:map.iter().last().unwrap()

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

为此,C++有
front()
back()
。没有,但是
*map.begin()
*map.rbegin()
(反向迭代器)可以实现这一点(假设知道映射不是空的)

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

我们怎样才能得到最后一个元素?通过单步遍历所有元素:
map.iter().last().unwrap()

我看到有一个合理的替代方案,
BTreeMap::iter()
返回的
,它实现了,
rev()
的方法可以工作,或者:

该方法要求
Self
实现,因此它应该始终是针对您的用例的优化和正确选择

fn版本(自)->
哪里
Self:doubleEndediter,

专用方法可以提高可发现性,但您可以做到:

let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
and the same for BTreeSet.
let-map:BTreeMap=。。。;
设min=map.iter().next();
让max=map.iter().next_back();
B树也是如此。

为什么要展开?您是否可以对代码进行结构化,以便在有条件的情况下使用返回值的存在(或不存在);我最终使用了
.unwrap\u或(0)
来处理这个用例。另一方面,我首先需要知道只有一个元素,因此
map.iter().next().unwrap()
——获取唯一元素的方法有点笨拙!
let map: BTreeMap<K, V> = ...;
let min = map.iter().next();
let max = map.iter().next_back();
and the same for BTreeSet.