@@ -25,11 +25,10 @@ use std::ops::{RangeBounds, Bound, Index, IndexMut};
25
25
#[ derive( Clone , PartialEq , Eq , PartialOrd , Ord , Hash , Default , Debug , RustcEncodable ,
26
26
RustcDecodable ) ]
27
27
pub struct SortedMap < K : Ord , V > {
28
- data : Vec < ( K , V ) >
28
+ data : Vec < ( K , V ) >
29
29
}
30
30
31
31
impl < K : Ord , V > SortedMap < K , V > {
32
-
33
32
#[ inline]
34
33
pub fn new ( ) -> SortedMap < K , V > {
35
34
SortedMap {
@@ -128,13 +127,13 @@ impl<K: Ord, V> SortedMap<K, V> {
128
127
129
128
/// Iterate over the keys, sorted
130
129
#[ inline]
131
- pub fn keys ( & self ) -> impl Iterator < Item = & K > + ExactSizeIterator {
130
+ pub fn keys ( & self ) -> impl Iterator < Item = & K > + ExactSizeIterator {
132
131
self . data . iter ( ) . map ( |& ( ref k, _) | k)
133
132
}
134
133
135
134
/// Iterate over values, sorted by key
136
135
#[ inline]
137
- pub fn values ( & self ) -> impl Iterator < Item = & V > + ExactSizeIterator {
136
+ pub fn values ( & self ) -> impl Iterator < Item = & V > + ExactSizeIterator {
138
137
self . data . iter ( ) . map ( |& ( _, ref v) | v)
139
138
}
140
139
@@ -266,6 +265,7 @@ impl<K: Ord, V> SortedMap<K, V> {
266
265
impl < K : Ord , V > IntoIterator for SortedMap < K , V > {
267
266
type Item = ( K , V ) ;
268
267
type IntoIter = :: std:: vec:: IntoIter < ( K , V ) > ;
268
+
269
269
fn into_iter ( self ) -> Self :: IntoIter {
270
270
self . data . into_iter ( )
271
271
}
@@ -294,10 +294,12 @@ impl<'a, K, Q, V> IndexMut<&'a Q> for SortedMap<K, V>
294
294
impl < K : Ord , V > FromIterator < ( K , V ) > for SortedMap < K , V > {
295
295
fn from_iter < T : IntoIterator < Item = ( K , V ) > > ( iter : T ) -> Self {
296
296
let mut data: Vec < ( K , V ) > = iter. into_iter ( ) . collect ( ) ;
297
+
297
298
data. sort_unstable_by ( |& ( ref k1, _) , & ( ref k2, _) | k1. cmp ( k2) ) ;
298
299
data. dedup_by ( |& mut ( ref k1, _) , & mut ( ref k2, _) | {
299
300
k1. cmp ( k2) == Ordering :: Equal
300
301
} ) ;
302
+
301
303
SortedMap {
302
304
data
303
305
}
0 commit comments