1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
#[macro_export] macro_rules! hash_map { () => { std::collections::HashMap::with_capacity(16) }; ($key: expr => $value: expr) => { hash_map!($key => $value; 16) }; ($key: expr => $value: expr; $init_capacity: expr) => { { let mut hash_map = std::collections::HashMap::with_capacity($init_capacity); hash_map.insert($key, $value); hash_map } }; ($($key: expr => $value: expr),*) => { vec![$(($key, $value)),*].into_iter().collect::<std::collections::HashMap<_, _>>() }; ($($key: expr => $value: expr,)*) => { hash_map!($($key => $value),*) }; } #[macro_export] macro_rules! btree_map { () => { std::collections::BTreeMap::new() }; ($key: expr => $value: expr) => { let mut map = std::collections::BTreeMap::new(); map.insert($key, $value); map }; ($($key: expr => $value: expr),*) => { { use std::iter::FromIterator; BTreeMap::from_iter(vec![$(($key, $value)),*]) } }; ($($key: expr => $value: expr,)*) => { btree_map!($($key => $value),*) }; } #[macro_export] macro_rules! hash_set { () => { std::collections::HashSet::new() }; ($($elements: expr),*) => { { let mut set = hash_set!(); $(set.insert($elements);)* set } }; ($($elements: expr,)*) => { hash_set!($($elements),*) }; } #[macro_export] macro_rules! btree_set { () => { std::collections::BTreeSet::new() }; ($($elements: expr),*) => { { let mut set = btree_set!(); $(set.insert($elements);)* set } }; ($($elements: expr,)*) => { btree_set!($($elements),*) }; }