1use std::collections::{BTreeMap, BinaryHeap, VecDeque};
2
3pub trait UniqueCount<T> {
4 fn unique_count(&self) -> BTreeMap<T, usize>;
6}
7
8impl<T: Ord + Clone> UniqueCount<T> for &[T] {
9 fn unique_count(&self) -> BTreeMap<T, usize> {
10 let mut res = BTreeMap::new();
11 for ele in self.iter() {
12 *res.entry(ele.clone()).or_insert(0) += 1;
13 }
14
15 res
16 }
17}
18
19impl<T: Ord + Clone> UniqueCount<T> for &[&T] {
20 fn unique_count(&self) -> BTreeMap<T, usize> {
21 let mut res = BTreeMap::new();
22 for &ele in self.iter() {
23 *res.entry(ele.clone()).or_insert(0) += 1;
24 }
25
26 res
27 }
28}
29
30impl<T: Ord + Clone> UniqueCount<T> for Vec<T> {
31 fn unique_count(&self) -> BTreeMap<T, usize> {
32 let mut res = BTreeMap::new();
33 for ele in self.iter() {
34 *res.entry(ele.clone()).or_insert(0) += 1;
35 }
36
37 res
38 }
39}
40
41impl<T: Ord + Clone> UniqueCount<T> for Vec<&T> {
42 fn unique_count(&self) -> BTreeMap<T, usize> {
43 let mut res = BTreeMap::new();
44 for &ele in self.iter() {
45 *res.entry(ele.clone()).or_insert(0) += 1;
46 }
47
48 res
49 }
50}
51
52impl<T: Ord + Clone> UniqueCount<T> for &Vec<T> {
53 fn unique_count(&self) -> BTreeMap<T, usize> {
54 let mut res = BTreeMap::new();
55 for ele in self.iter() {
56 *res.entry(ele.clone()).or_insert(0) += 1;
57 }
58
59 res
60 }
61}
62
63impl<T: Ord + Clone> UniqueCount<T> for &Vec<&T> {
64 fn unique_count(&self) -> BTreeMap<T, usize> {
65 let mut res = BTreeMap::new();
66 for &ele in self.iter() {
67 *res.entry(ele.clone()).or_insert(0) += 1;
68 }
69
70 res
71 }
72}
73
74impl<T: Ord + Clone> UniqueCount<T> for VecDeque<T> {
75 fn unique_count(&self) -> BTreeMap<T, usize> {
76 let mut res = BTreeMap::new();
77 for ele in self.iter() {
78 *res.entry(ele.clone()).or_insert(0) += 1;
79 }
80
81 res
82 }
83}
84
85impl<T: Ord + Clone> UniqueCount<T> for VecDeque<&T> {
86 fn unique_count(&self) -> BTreeMap<T, usize> {
87 let mut res = BTreeMap::new();
88 for &ele in self.iter() {
89 *res.entry(ele.clone()).or_insert(0) += 1;
90 }
91
92 res
93 }
94}
95
96impl<T: Ord + Clone> UniqueCount<T> for &VecDeque<T> {
97 fn unique_count(&self) -> BTreeMap<T, usize> {
98 let mut res = BTreeMap::new();
99 for ele in self.iter() {
100 *res.entry(ele.clone()).or_insert(0) += 1;
101 }
102
103 res
104 }
105}
106
107impl<T: Ord + Clone> UniqueCount<T> for &VecDeque<&T> {
108 fn unique_count(&self) -> BTreeMap<T, usize> {
109 let mut res = BTreeMap::new();
110 for &ele in self.iter() {
111 *res.entry(ele.clone()).or_insert(0) += 1;
112 }
113
114 res
115 }
116}
117
118impl<T: Ord + Clone> UniqueCount<T> for BinaryHeap<T> {
119 fn unique_count(&self) -> BTreeMap<T, usize> {
120 let mut res = BTreeMap::new();
121 for ele in self.iter() {
122 *res.entry(ele.clone()).or_insert(0) += 1;
123 }
124
125 res
126 }
127}
128
129impl<T: Ord + Clone> UniqueCount<T> for BinaryHeap<&T> {
130 fn unique_count(&self) -> BTreeMap<T, usize> {
131 let mut res = BTreeMap::new();
132 for &ele in self.iter() {
133 *res.entry(ele.clone()).or_insert(0) += 1;
134 }
135
136 res
137 }
138}
139
140impl<T: Ord + Clone> UniqueCount<T> for &BinaryHeap<T> {
141 fn unique_count(&self) -> BTreeMap<T, usize> {
142 let mut res = BTreeMap::new();
143 for ele in self.iter() {
144 *res.entry(ele.clone()).or_insert(0) += 1;
145 }
146
147 res
148 }
149}
150
151impl<T: Ord + Clone> UniqueCount<T> for &BinaryHeap<&T> {
152 fn unique_count(&self) -> BTreeMap<T, usize> {
153 let mut res = BTreeMap::new();
154 for &ele in self.iter() {
155 *res.entry(ele.clone()).or_insert(0) += 1;
156 }
157
158 res
159 }
160}