pstd 1.0.151

Crate with parts of Rust std library ( different implementations, features not yet stabilised etc ).
Documentation
use super::*;

#[derive(Eq, PartialEq, Ord, PartialOrd)]
struct Key<'a> {
    x: u64,
    s: &'a str,
}

impl<'a> Comparable<(u64, String)> for Key<'a> {
    fn compare(&self, k: &(u64, String)) -> Ordering {
        let o = self.x.compare(&k.0);
        if o != Ordering::Equal {
            return o;
        }
        self.s.compare(&k.1)
    }
}

impl<'a> Equivalent<(u64, String)> for Key<'a> {
    fn equivalent(&self, k: &(u64, String)) -> bool {
        self.x == k.0 && self.s == k.1
    }
}

#[test]
fn test_comparable() {
    let mut m = BTreeMap::<(u64, String), u64>::new();
    m.insert((99, String::from("hello")), 98);
    m.insert((99, String::from("george")), 98);
    println!("m={:?}", m);

    let x = m.get(&Key { x: 99, s: "hello" });
    println!("x={:?}", x);

    let start = &Key { x: 99, s: "aaa" };
    let end = &Key { x: 100, s: "hello" };
    for (k, v) in m.range::<Key, _>(start..end) {
        println!("k={:?} v={:?}", k, v);
    }
}