如何在BTreeMap / BTreeSet中找到下一个较小的键?

时间:2018-04-01 15:52:12

标签: rust b-tree

如果我正确理解b树,那么在对数时间内搜索密钥应该是容易的。如果密钥不存在,则可以返回下一个越来越小的密钥;如果要插入的话,给定密钥的邻居。

此功能是否已存在?

使用当前API执行此操作的一种可能但复杂的方法是插入密钥,然后获取该密钥的迭代器,以便我们可以在此迭代器上调用next。虽然,它还不清楚如何获得新插入元素的迭代器(参见this question

为什么这些方法丢失或我遗失了什么?

1 个答案:

答案 0 :(得分:3)

您可以在返回的Range对象上使用range method和迭代器方法:

use std::collections::BTreeMap;
let mut map = BTreeMap::new();
map.insert(2, 0);
map.insert(3, 1);
map.insert(5, 2);
map.insert(7, 3);
map.insert(11, 4);
let key = 6;
println!("maximum in map less than {}: {:?}",
         key, map.range(..key).next_back().unwrap());
println!("minimum in map greater than {}: {:?}",
         key, map.range(key..).next().unwrap());

next_back()next()都执行树遍历,因此效率相当高。