Algorithm 获取BTreeMap中最大值的键的惯用方法?

Algorithm 获取BTreeMap中最大值的键的惯用方法?,algorithm,rust,btreemap,Algorithm,Rust,Btreemap,我需要获取与BTreeMap中最大值关联的键。(以另一种方式进行此操作很简单。) 到目前为止,我的努力是: let mut opt_pair: Option<(&Foo, u32)> = None; for (key, value) in my_btreemap { // my_btreemap is known to be non-empty match opt_pair { Some(pair) => { if va

我需要获取与BTreeMap中最大值关联的键。(以另一种方式进行此操作很简单。)

到目前为止,我的努力是:

let mut opt_pair: Option<(&Foo, u32)> = None; 
for (key, value) in my_btreemap { // my_btreemap is known to be non-empty
    match opt_pair {
        Some(pair) => {
            if value > pair.1 {
                opt_pair = Some((key, value)); 
            }
        },
        None => {
            opt_pair = Some((key, value)); 
        }
    }
}

opt_pair.unwrap().0
让mut opt_pair:Option=None;
my_btreemap{//my_btreemap中的for(key,value)已知为非空
配对{
一些(配对)=>{
如果值>配对。1{
opt_pair=Some((键,值));
}
},
无=>{
opt_pair=Some((键,值));
}
}
}
opt_pair.unwrap().0
是否有一种惯用的方式,以更实用的方式来实现这一点?

用于获取每一对的详细信息。然后调用迭代器;这需要一个闭包来比较

let opt_pair = map
    .iter()                   // get an iterator over the tree
    .max_by_key( |p| p.1 )    // check the value of each pair for the max
    .unwrap();                // unwrap the result

println!("key: {}, value: {}", opt_pair.0, opt_pair.1);

这不是很奇怪吗?搜索将是O(n)如果存在多个“最大值”,您是否希望有任何特定行为?@trentcl已修复,谢谢。@Stargateur
my_btreemap
通常包含1-10个条目,因此O(n)可以。@MatthieuM。在领带的情况下,我不在乎哪一条被退回,只要它是稳定的。