- 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/
我试图理解两者之间的区别 let rows = Vec::new(); for (k, v) in my_btree { // BTreeMap rows.push((&k, &v)) //
此示例代码: use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, S
我可以将枚举转换为 TreeMap 吗? enum En1 { val1, val2, val3 } fn fn1() -> BTreeMap { let mut map = BTre
我正在使用 toml crate 来解析一个如下所示的 .toml 文件: config = { option = "?" } array = [ { key1 = value1, key2
刚开始(尝试)学习 Rust。如何使用“bytestrings”作为 std::collections::BTreeMap 中的键? 似乎我不能使用 [u8],因为该类型需要固定大小。 使用向量,例如
下面的两个代码块是等效的,但由于某种原因,我在第二个代码块上遇到了编译器错误。 我很难理解为什么 names在一个版本中借用,而不是在另一个版本中。 我试图弄清楚如何从不可变的 BTreeMap 中读
我正在使用霍夫曼编码在 Rust 中创建压缩/解压缩库。第一步是创建一个包含所有唯一字符和出现次数的数据结构。我从一个简单的文本文件开始,遇到与换行符“字符”相关的问题。 我第一次尝试解决这个问题是构
代码: #[derive(Debug)] struct Haha { data: i32, } use std::collections::BTreeMap; fn main() {
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我想从有序 集合中找到第一个大于限制的元素。虽然对其进行迭代始终是一种选择,但我需要一个更快的方法。目前,我想出了一个像this这样的解决方案。但感觉有点老套: use std::cmp::Order
我正在做一个锻炼练习,其中我需要反转拼字游戏分数的 map ;分数图 => 字母变成字母图 => 分数。我想出了以下 Rust 代码: use std::collections::BTreeMap;
如果您有键/值对(或键)的排序映射,一个明显的操作是获取第一对或最后一对(或键)。 C++ 的 std::vector有 front() 和 back() 用于此目的。 std::map不会,但是 *
我不确定这是否是一个新手问题。 rust 标准库 std::collections提供 map 和 set 的 B-tree 实现。 我查看了文档 here ,但我找不到用于实现的分支因子 m。 最佳
这个问题在这里已经有了答案: How to make a compiled Regexp a global variable? (1 个回答) Why can't const functions i
我想调用range在 BTreeMap 上,键是像 (a,b) 这样的元组.假设我们有: (1, 2) => "a" (1, 3) => "b" (1, 4) => "c" (2, 1) => "d"
我正在尝试从 BTreeMap 构建一个 RangeSet(其中键是下限,值是上限)。只要我只是在查找东西,这就很好用。然而,第一个变异方法让我难住了: 如果我想插入一个范围到我的集合,我需要检查我的
如果我对 B 树的理解正确,那么在对数时间内搜索 key 应该是容易且可能的。如果key不存在,返回下一个更小更大的key;给定键的邻居,如果它会被插入。 这个功能是否已经存在? 使用当前 API 的
此处来自 Python。 我想知道为什么 BTreeMap 是可散列的。我并不惊讶 Hashmap 不是,但我不明白为什么 BTreeMap 是。 例如,我可以这样做: let mut seen_co
此处来自 Python。 我想知道为什么 BTreeMap 是可散列的。我并不惊讶 Hashmap 不是,但我不明白为什么 BTreeMap 是。 例如,我可以这样做: let mut seen_co
use std::collections::btree_map::BTreeMap; fn main() { let mut map: BTreeMap; map.insert("na
我是一名优秀的程序员,十分优秀!