#hash-map #user-defined #key-index #define #linkedhash-map

indexedlinkedhashmap

可索引的 LinkedHashMap。用户定义控制顺序的数据结构。

4 个稳定版本

3.0.0 2023年11月11日
2.0.2 2023年6月19日
2.0.0 2023年6月18日

#927数据结构

MIT 许可证

19KB
407

IndexedLinkedHashMap — 最新版本 下载 文档

可索引的 LinkedHashMap。用 Rust 编写。

关于

带来您自己的排序数据结构。使用标准库的 HashMap

  • 如果您使用类似于 Vec 的数据结构作为键,可以轻松进行索引。
  • 如果您使用类似于 BinaryHeap 的数据结构作为键,在特定操作上进行索引没有太多意义。
    • 例如,这是调用 set 方法的样子:ins.set(None, value)

开发者

  • 如果您想使用自己的数据结构,请在 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

无运行时依赖

特性