pstd 1.0.149

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 );
    }
    
}