4 个稳定版本
3.0.0 | 2023年11月11日 |
---|---|
2.0.2 | 2023年6月19日 |
2.0.0 | 2023年6月18日 |
#927 在 数据结构
19KB
407 行
IndexedLinkedHashMap —
可索引的 LinkedHashMap。用 Rust 编写。
关于
带来您自己的排序数据结构。使用标准库的 HashMap
。
- 如果您使用类似于
Vec
的数据结构作为键,可以轻松进行索引。 - 如果您使用类似于
BinaryHeap
的数据结构作为键,在特定操作上进行索引没有太多意义。- 例如,这是调用 set 方法的样子:
ins.set(None, value)
。
- 例如,这是调用 set 方法的样子:
开发者
- 如果您想使用自己的数据结构,请在
indexedlinkedhashmap::traits::Ordered
中实现Ordered
特性。
特性
- collections_ordering_vec
- 支持
Vec
使用
- 支持
- collections_ordering_binary_heap
- 支持
BinaryHeap
使用
- 支持
用法
[dependencies]
indexedlinkedhashmap = "3.0.0"
[dependencies]
indexedlinkedhashmap = { version = "3.0.0", features = [ "collections_ordering_vec", "collections_ordering_binary_heap" ] }
示例
fn main() {
let mut ins = IndexedLinkedHashMap::<Vec<&str>, &str, usize>::new();
assert!(ins.remove("k") == None);
assert!(ins.len() == 0);
assert!(ins.keys().len() == 0);
assert!(ins.values().len() == 0);
ins.set("k", 1);
assert!(
ins.remove("k")
== Some(IndexedLinkedHashMapValue {
index: Some(0),
value: 1
})
);
assert!(ins.len() == 0);
assert!(ins.keys().len() == 0);
assert!(ins.values().len() == 0);
}
fn main() {
let mut ins = IndexedLinkedHashMap::<Vec<&str>, &str, usize>::new();
ins.set("k", 1);
assert!(ins.len() == 1);
assert!(ins.keys().len() == 1);
assert!(ins.values().len() == 1);
assert!(ins.get("k") == Some(&1));
}
#[derive(Clone, Debug)]
struct Line2D {
id: String,
p1: usize,
p2: usize,
}
fn main() {
let mut ins = IndexedLinkedHashMap::<Vec<String>, String, Line2D>::new();
let line = Line2D {
id: String::from("1"),
p1: 0,
p2: 10,
};
ins.set(line.to_owned().id, line);
}
use std::collections::BinaryHeap;
fn main() {
let mut ins = IndexedLinkedHashMap::<BinaryHeap<usize>, usize, bool>::new();
ins.set(2, false);
ins.set(1, true);
assert!(ins.at(Some(1)) == Some(&true));
}
测试
运行 cargo test --features collections_ordering_vec,collections_ordering_binary_heap