@@ -42,39 +42,23 @@ pub struct TreeMap<K, V> {
42
42
43
43
impl < K : Eq + TotalOrd , V : Eq > Eq for TreeMap < K , V > {
44
44
fn eq ( & self , other : & TreeMap < K , V > ) -> bool {
45
- if self . len ( ) != other. len ( ) {
46
- false
47
- } else {
48
- let mut x = self . iter ( ) ;
49
- let mut y = other. iter ( ) ;
50
- for _ in range ( 0 u, self . len ( ) ) {
51
- if x. next ( ) . unwrap ( ) != y. next ( ) . unwrap ( ) {
52
- return false
53
- }
54
- }
55
- true
56
- }
45
+ self . len ( ) == other. len ( ) &&
46
+ self . iter ( ) . zip ( other. iter ( ) ) . all ( |( a, b) | a == b)
57
47
}
58
- fn ne ( & self , other : & TreeMap < K , V > ) -> bool { !self . eq ( other) }
59
48
}
60
49
61
50
// Lexicographical comparison
62
51
fn lt < K : Ord + TotalOrd , V : Ord > ( a : & TreeMap < K , V > ,
63
52
b : & TreeMap < K , V > ) -> bool {
64
- let mut x = a. iter ( ) ;
65
- let mut y = b. iter ( ) ;
66
-
67
- let ( a_len, b_len) = ( a. len ( ) , b. len ( ) ) ;
68
- for _ in range ( 0 u, num:: min ( a_len, b_len) ) {
69
- let ( key_a, value_a) = x. next ( ) . unwrap ( ) ;
70
- let ( key_b, value_b) = y. next ( ) . unwrap ( ) ;
53
+ // the Zip iterator is as long as the shortest of a and b.
54
+ for ( ( key_a, value_a) , ( key_b, value_b) ) in a. iter ( ) . zip ( b. iter ( ) ) {
71
55
if * key_a < * key_b { return true ; }
72
56
if * key_a > * key_b { return false ; }
73
57
if * value_a < * value_b { return true ; }
74
58
if * value_a > * value_b { return false ; }
75
59
}
76
60
77
- a_len < b_len
61
+ a . len ( ) < b . len ( )
78
62
}
79
63
80
64
impl < K : Ord + TotalOrd , V : Ord > Ord for TreeMap < K , V > {
0 commit comments