1 个不稳定版本
0.1.0 | 2023年9月29日 |
---|
#2471 在 数据结构
45KB
1K SLoC
rankmap
排名哈希表。
一个结合了以下操作功能的哈希表/二叉堆数据结构
时间复杂度
[描述] | [操作] | [复杂度] |
---|---|---|
通过键获取值 | 获取 | O(1)~ |
检查键是否存在 | contains_key | O(1)~ |
弹出排名最低的元素 | 弹出 | O(log(N)) |
获取排名最低的元素 | top | O(1) |
插入带排名的元素 | 插入 | O(log(N)) |
删除元素 | 删除 | O(log(N)) |
use std::thread;
use std::time::{Duration, Instant};
use rankmap::RankMap;
fn task1() {
println!("task1 finished")
}
fn task2() {
println!("task2 finished")
}
fn task3() {
println!("task3 finished")
}
fn main() {
let mut scheduler: RankMap<&str, Box<dyn Fn()>, Instant> = RankMap::new();
let tank_id = "task1";
let task = Box::new(task1);
let run_at = Instant::now() + Duration::from_secs(1);
scheduler.insert(tank_id, task, run_at);
let tank_id = "task2";
let task = Box::new(task2);
let run_at = Instant::now() + Duration::from_secs(2);
scheduler.insert(tank_id, task, run_at);
while let Some((task_name, task, run_at)) = scheduler.pop() {
let backoff = run_at - Instant::now();
thread::sleep(backoff);
println!("executing {}", task_name);
task();
}
let tank_id = "task3";
let task = Box::new(task3);
let run_at = Instant::now() + Duration::from_secs(1);
scheduler.insert(tank_id, task, run_at);
if let Some((task, run_at)) = scheduler.remove(&"task3") {
println!("task3 cancelled");
}
assert!(scheduler.top().is_none());
}
更多详细信息请参阅 文档。
依赖项
~1MB
~14K SLoC