作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我对 B 树的理解正确,那么在对数时间内搜索 key 应该是容易且可能的。如果key不存在,返回下一个更小更大的key;给定键的邻居,如果它会被插入。
这个功能是否已经存在?
使用当前 API 的一种可行但复杂的方法是插入 key ,然后获取该 key 的迭代器,以便我们可以在该迭代器上调用 next
。虽然,还不清楚如何获取新插入元素的迭代器(参见 this question )
为什么缺少这些方法或者我是否缺少某些东西?
最佳答案
您可以使用 range
method以及返回的 Range
对象的迭代器方法:
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;
// maximum in map less than 6: (5, 2)
println!("maximum in map less than {}: {:?}",
key, map.range(..key).next_back().unwrap());
// minimum in map greater than or equal to 6: (7, 3)
println!("minimum in map greater than or equal to {}: {:?}",
key, map.range(key..).next().unwrap());
next_back()
和 next()
都执行树遍历,因此它们相当高效。
关于rust - 如何在 BTreeMap/BTreeSet 中找到下一个较小的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599833/
我是一名优秀的程序员,十分优秀!