3.15.6 BTreeMap(B 树映射)

Rust 中的 BTreeMap(B 树映射)是一种自平衡的有序映射数据结构,它以 B 树的形式存储键值对。BTreeMap 具有对数级的时间复杂度,这使得它在需要维护键的顺序时非常有效。以下是有关 Rust BTreeMap 的一些详细信息:

1. 创建 BTreeMap:

要创建一个新的空 BTreeMap,可以使用 BTreeMap::new() 方法。需要导入 std::collections::BTreeMap 模块以使用 BTreeMap。

#![allow(unused)]
fn main() {
use std::collections::BTreeMap;

let mut map = BTreeMap::new();
}

2. 添加元素:

可以使用 insert() 方法向 BTreeMap 中添加键值对。如果键已存在,则此方法将返回 Some(old_value),否则返回 None

#![allow(unused)]
fn main() {
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);
}

3. 访问元素:

可以使用 get() 方法根据键查找对应的值。此方法返回一个 Option<&V> 类型,如果找到键,则返回 Some(&value),否则返回 None

#![allow(unused)]
fn main() {
let value = map.get("one"); // 返回 Option<&V>
}

还可以使用 get_mut() 方法获取可变引用。

4. 删除元素:

可以使用remove() 方法删除 BTreeMap 中的键值对。此方法返回一个 Option<V> 类型,如果找到并删除了键值对,则返回 Some(value),否则返回 None

#![allow(unused)]
fn main() {
map.remove("one"); // 删除键为 "one" 的键值对
}

5. 遍历元素:

可以使用 iter() 方法遍历 BTreeMap 中的所有键值对。遍历顺序按键的顺序进行。iter_mut() 方法可用于遍历可变引用。

#![allow(unused)]
fn main() {
for (key, value) in map.iter() {
    println!("{}: {}", key, value);
}
}

6. BTreeMap 的长度:

可以使用 len() 方法获取 BTreeMap 中的键值对数量。还可以使用 is_empty() 方法检查 BTreeMap 是否为空。

7. 最小和最大键:

可以使用 first_key_value()last_key_value() 方法分别获取 BTreeMap 中具有最小和最大键的键值对。这些方法返回一个 Option<(&K, &V)> 类型,如果找到键值对,则返回 Some((&key, &value)),否则返回 None。

#![allow(unused)]
fn main() {
let min_key_value = map.first_key_value(); // 返回 Option<(&K, &V)>
let max_key_value = map.last_key_value(); // 返回 Option<(&K, &V)>
}

8. 范围查询:

可以使用 range() 方法查询 BTreeMap 中某个范围内的键值对。例如,可以查询所有键大于等于 "one" 且小于等于 "three" 的键值对:

#![allow(unused)]
fn main() {
for (key, value) in map.range("one".."three") {
    println!("{}: {}", key, value);
}
}