Rust稳定二叉搜索树库stable_bst的使用,提供高效有序数据存储和检索功能
Rust稳定二叉搜索树库stable_bst的使用,提供高效有序数据存储和检索功能
概述
stable_bst是一个基于二叉搜索树的有序map和set实现。它是从contain-rs/bst fork而来,并更新以支持稳定版Rust(1.9.0及以上版本)。
安装
在你的项目目录中运行以下Cargo命令:
cargo add stable_bst
或者在你的Cargo.toml中添加以下行:
stable_bst = "0.2.0"
完整示例代码
use stable_bst::{TreeMap, TreeSet};
fn main() {
// TreeMap示例 - 键值对的有序存储
let mut map = TreeMap::new();
// 插入一些键值对
map.insert(3, "three");
map.insert(1, "one");
map.insert(2, "two");
map.insert(5, "five");
map.insert(4, "four");
// 按顺序遍历键值对
println!("TreeMap contents:");
for (key, value) in map.iter() {
println!("{}: {}", key, value);
}
// 查找特定的键
if let Some(value) = map.get(&3) {
println!("Found value for key 3: {}", value);
}
// TreeSet示例 - 有序集合
let mut set = TreeSet::new();
// 插入一些值
set.insert(30);
set.insert(10);
set.insert(20);
set.insert(50);
set.insert(40);
// 按顺序遍历值
println!("\nTreeSet contents:");
for value in set.iter() {
println!("{}", value);
}
// 检查集合是否包含某个值
if set.contains(&30) {
println!("Set contains 30");
}
// 范围查询示例
println!("\nValues between 20 and 40:");
for value in set.range(20..=40) {
println!("{}", value);
}
}
功能特点
- 提供TreeMap和TreeSet两种数据结构
- 所有元素按顺序存储
- 支持高效的查找、插入和删除操作
- 支持范围查询
- 提供标准的迭代器接口
许可证
该项目采用MIT或Apache-2.0双许可证。
1 回复
Rust稳定二叉搜索树库stable_bst使用指南
stable_bst
是一个Rust实现的稳定二叉搜索树库,提供了高效的有序数据存储和检索功能。它特别适合需要维护有序数据集合的场景。
主要特性
- 基于二叉搜索树实现,保证数据有序性
- 提供O(log n)时间复杂度的插入、删除和查找操作
- 支持迭代器和范围查询
- 内存安全且线程安全的设计
安装
在Cargo.toml中添加依赖:
[dependencies]
stable_bst = "0.2.0"
基本使用方法
创建二叉搜索树
use stable_bst::TreeMap;
let mut tree = TreeMap::new();
插入元素
tree.insert(3, "three");
tree.insert(1, "one");
tree.insert(2, "two");
查找元素
if let Some(value) = tree.get(&2) {
println!("Found: {}", value); // 输出: Found: two
}
删除元素
tree.remove(&1);
遍历元素
for (key, value) in &tree {
println!("{}: {}", key, value);
}
// 输出:
// 2: two
// 3: three
高级功能
范围查询
use std::ops::Bound;
// 查询2到3之间的元素
let range = tree.range((Bound::Included(2), Bound::Included(3)));
for (key, value) in range {
println!("{}: {}", key, value);
}
获取最小和最大元素
if let Some((min_key, min_value)) = tree.first_key_value() {
println!("Min: {}: {}", min_key, min_value);
}
if let Some((max_key, max_value)) = tree.last_key_value() {
println!("Max: {}: {}", max_key, max_value);
}
自定义比较函数
use stable_bst::TreeSet;
use std::cmp::Ordering;
#[derive(Debug)]
struct Person {
name: String,
age: u32,
}
let mut people = TreeSet::new(|a: &Person, b: &Person| a.age.cmp(&b.age));
people.insert(Person { name: "Alice".to_string(), age: 30 });
people.insert(Person { name: "Bob".to_string(), age: 25 });
people.insert(Person { name: "Charlie".to_string(), age: 35 });
for person in &people {
println!("{}: {}", person.name, person.age);
}
// 输出:
// Bob: 25
// Alice: 30
// Charlie: 35
完整示例代码
use stable_bst::TreeMap;
use std::ops::Bound;
fn main() {
// 创建二叉搜索树
let mut tree = TreeMap::new();
// 插入元素
tree.insert(5, "apple");
tree.insert(3, "banana");
tree.insert(7, "orange");
tree.insert(2, "pear");
tree.insert(4, "grape");
// 查找元素
if let Some(fruit) = tree.get(&4) {
println!("Key 4 contains: {}", fruit); // 输出: grape
}
// 删除元素
tree.remove(&3);
// 遍历元素
println!("All elements:");
for (key, value) in &tree {
println!("{}: {}", key, value);
}
/* 输出:
2: pear
4: grape
5: apple
7: orange
*/
// 范围查询
println!("Range query (3-6):");
let range = tree.range((Bound::Included(3), Bound::Included(6)));
for (key, value) in range {
println!("{}: {}", key, value);
}
/* 输出:
4: grape
5: apple
*/
// 获取最小和最大元素
if let Some((min_key, min_value)) = tree.first_key_value() {
println!("Min key: {}, value: {}", min_key, min_value); // 输出: 2, pear
}
if let Some((max_key, max_value)) = tree.last_key_value() {
println!("Max key: {}, value: {}", max_key, max_value); // 输出: 7, orange
}
}
性能注意事项
- 对于随机数据,
stable_bst
表现良好 - 对于已排序的数据,可能导致树不平衡,影响性能
- 考虑使用
BTreeMap
作为替代,特别是当数据量较大时
stable_bst
是一个简单但功能完整的二叉搜索树实现,适合需要有序数据存储和检索的中小型数据集场景。