#map #combination #set #key-value

subset-map

A map where the keys are subsets of an initial set of elements

9 releases

Uses old Rust 2015

0.3.4 Jan 29, 2020
0.3.3 Jan 29, 2020
0.3.2 May 3, 2018
0.2.2 May 1, 2018
0.1.0 Apr 30, 2018

#1323 in Data structures

Download history 16/week @ 2024-07-01 52/week @ 2024-09-23

52 downloads per month

Apache-2.0/MIT

40KB
579 lines

subset-map

Summary

subset-map is a map like data structure where the keys are combinations of elements the SubsetMap has been initialized with.

The order of the elements is defined by the position of an element within the elements the SubsetMap has been initialized with.

SubsetMap clones the elements into the subsets. So you should consider to only use element types where you would feel good to assign them the Copy trait.

Lookup is done linearly. Therefore SubsetMap should only be used with not too big sets of elements.

Example

use subset_map::*;
// Initialize the map where the payloads are basically the keys
let subset_map = SubsetMap::fill(&[1, 2, 3], |x| x.iter().cloned().collect::<Vec<_>>());

assert_eq!(subset_map.get(&[1]), Some(&vec![1]));
assert_eq!(subset_map.get(&[2]), Some(&vec![2]));
assert_eq!(subset_map.get(&[3]), Some(&vec![3]));
assert_eq!(subset_map.get(&[1, 2]), Some(&vec![1, 2]));
assert_eq!(subset_map.get(&[2, 3]), Some(&vec![2, 3]));
assert_eq!(subset_map.get(&[1, 3]), Some(&vec![1, 3]));
assert_eq!(subset_map.get(&[1, 2, 3]), Some(&vec![1, 2, 3]));

// No internal ordering is performed:
// The position in the original set is crucial:
assert_eq!(subset_map.get(&[2,1]), None);

Features

The serde feature allows serialization and deserialization with serde.

Recent Changes

  • 0.3.4
    • added awalk method which operates on keys and values
  • 0.3.3
    • removed some unnecessary lifetimes
  • 0.3.2
    • Added more methods to iterate/walk
  • 0.3.1
    • Added methods to work with payloads
  • 0.3.0
    • [BREAKING CHANGES]: Changed API to be more consistent
  • 0.2.2
    • fixed size function
  • 0.2.1
    • Optimized find and lookup a bit
    • Added size finction to return the number of combinations
  • 0.2.0
    • Renamed MatchQuality to LookupResult
    • LookupResult also contains the no match case
    • improved documentation

License

subset-map is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

Copyright(2018) Christian Douven

See LICENSE-APACHE and LICENSE-MIT for details.

License: Apache-2.0/MIT

Dependencies

~170KB