pub struct SkipList<K, V> { /* private fields */ }
Implementations
sourceimpl<K: Ord, V> SkipList<K, V>
impl<K: Ord, V> SkipList<K, V>
sourcepub fn new(max_level: usize) -> Self
pub fn new(max_level: usize) -> Self
Create a skip list with max level
Example
use skip_list::SkipList;
let mut skiplist: SkipList<i32, i32> = SkipList::new(12);
sourcepub fn get(&self, k: &K) -> Option<&V>
pub fn get(&self, k: &K) -> Option<&V>
Returns a reference to the value of the key in skip list or None if not exist.
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
skip_list.insert(1, "a");
assert_eq!(skip_list.get(&1), Some(&"a"));
sourcepub fn insert(&mut self, k: K, v: V) -> Option<V>
pub fn insert(&mut self, k: K, v: V) -> Option<V>
Insert a key-value pair into skip list. If the key already exists,
updates key’s value and return old value. Otherwise, None
is returned.
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
assert_eq!(skip_list.insert(1, "a"), None);
assert_eq!(skip_list.get(&1), Some(&"a"));
assert_eq!(skip_list.insert(1, "aa"), Some("a"));
assert_eq!(skip_list.get(&1), Some(&"aa"));
sourcepub fn delete(&mut self, k: &K) -> Option<V>
pub fn delete(&mut self, k: &K) -> Option<V>
Deletes and returns the key’s value from skip list or None
if not exist.
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
assert_eq!(skip_list.insert(1, "a"), None);
assert_eq!(skip_list.get(&1), Some(&"a"));
assert_eq!(skip_list.delete(&1), Some("a"));
assert_eq!(skip_list.get(&1), None);
sourcepub fn iter(&self) -> Iter<'_, K, V>ⓘNotable traits for Iter<'a, K, V>impl<'a, K, V> Iterator for Iter<'a, K, V> type Item = (&'a K, &'a V);
pub fn iter(&self) -> Iter<'_, K, V>ⓘNotable traits for Iter<'a, K, V>impl<'a, K, V> Iterator for Iter<'a, K, V> type Item = (&'a K, &'a V);
Visit all key-value pairs in the order of keys The Iterator element type is (&K, &V).
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
assert_eq!(skip_list.insert(3, "c"), None);
assert_eq!(skip_list.insert(4, "d"), None);
assert_eq!(skip_list.insert(2, "b"), None);
assert_eq!(skip_list.insert(5, "e"), None);
assert_eq!(skip_list.insert(1, "a"), None);
// visit all key-value paris in the order of keys
let mut keys = vec![];
let mut values = vec![];
for (k, v) in skip_list.iter() {
keys.push(k);
values.push(v);
}
// check key sorted
assert_eq!(keys, vec![&1, &2, &3, &4, &5]);
assert_eq!(values, vec![&"a", &"b", &"c", &"d", &"e"]);
sourcepub fn iter_mut(&self) -> IterMut<'_, K, V>ⓘNotable traits for IterMut<'a, K, V>impl<'a, K, V> Iterator for IterMut<'a, K, V> type Item = (&'a K, &'a mut V);
pub fn iter_mut(&self) -> IterMut<'_, K, V>ⓘNotable traits for IterMut<'a, K, V>impl<'a, K, V> Iterator for IterMut<'a, K, V> type Item = (&'a K, &'a mut V);
Visit all key-value pairs in the order of keys The Iterator element type is (&K, &mut V). The value is mut, can be update;
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
assert_eq!(skip_list.insert(3, 3), None);
assert_eq!(skip_list.insert(4, 4), None);
assert_eq!(skip_list.insert(2, 2), None);
assert_eq!(skip_list.insert(5, 5), None);
assert_eq!(skip_list.insert(1, 1), None);
for (k, v) in skip_list.iter_mut() {
*v = k * 10;
}
// visit all key-value paris in the order of keys
let mut keys = vec![];
let mut values = vec![];
for (k, v) in skip_list.iter() {
keys.push(k);
values.push(v);
}
// check key sorted
assert_eq!(keys, vec![&1, &2, &3, &4, &5]);
assert_eq!(values, vec![&10, &20, &30, &40, &50]);
Trait Implementations
sourceimpl<K, V> IntoIterator for SkipList<K, V>
impl<K, V> IntoIterator for SkipList<K, V>
sourcefn into_iter(self) -> Self::IntoIter
fn into_iter(self) -> Self::IntoIter
Visit all key-value pairs in the order of keys The Iterator element type is (K, V).
Example
use skip_list::SkipList;
let mut skip_list = SkipList::default();
assert_eq!(skip_list.insert(3, "c"), None);
assert_eq!(skip_list.insert(4, "d"), None);
assert_eq!(skip_list.insert(2, "b"), None);
assert_eq!(skip_list.insert(5, "e"), None);
assert_eq!(skip_list.insert(1, "a"), None);
// visit all key-value paris in the order of keys
let mut keys = vec![];
let mut values = vec![];
for (k, v) in skip_list.into_iter() {
keys.push(k);
values.push(v);
}
// check key sorted
assert_eq!(keys, vec![1, 2, 3, 4, 5]);
assert_eq!(values, vec!["a", "b", "c", "d", "e"]);
Auto Trait Implementations
impl<K, V> RefUnwindSafe for SkipList<K, V> where
K: RefUnwindSafe,
V: RefUnwindSafe,
impl<K, V> !Send for SkipList<K, V>
impl<K, V> !Sync for SkipList<K, V>
impl<K, V> Unpin for SkipList<K, V> where
K: Unpin,
V: Unpin,
impl<K, V> UnwindSafe for SkipList<K, V> where
K: UnwindSafe + RefUnwindSafe,
V: UnwindSafe + RefUnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more