@@ -1093,7 +1093,13 @@ impl<T: Ord> FromIterator<T> for BTreeSet<T> {
10931093
10941094 // use stable sort to preserve the insertion order.
10951095 inputs. sort ( ) ;
1096- let iter = inputs. into_iter ( ) . map ( |k| ( k, ( ) ) ) ;
1096+ BTreeSet :: from_sorted_iter ( inputs. into_iter ( ) )
1097+ }
1098+ }
1099+
1100+ impl < T : Ord > BTreeSet < T > {
1101+ fn from_sorted_iter < I : Iterator < Item = T > > ( iter : I ) -> BTreeSet < T > {
1102+ let iter = iter. map ( |k| ( k, ( ) ) ) ;
10971103 let map = BTreeMap :: bulk_build_from_sorted_iter ( iter) ;
10981104 BTreeSet { map }
10991105 }
@@ -1258,11 +1264,10 @@ impl<T: Ord + Clone> Sub<&BTreeSet<T>> for &BTreeSet<T> {
12581264 /// let b = BTreeSet::from([3, 4, 5]);
12591265 ///
12601266 /// let result = &a - &b;
1261- /// let result_vec: Vec<_> = result.into_iter().collect();
1262- /// assert_eq!(result_vec, [1, 2]);
1267+ /// assert_eq!(result, BTreeSet::from([1, 2]));
12631268 /// ```
12641269 fn sub ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1265- self . difference ( rhs) . cloned ( ) . collect ( )
1270+ BTreeSet :: from_sorted_iter ( self . difference ( rhs) . cloned ( ) )
12661271 }
12671272}
12681273
@@ -1281,11 +1286,10 @@ impl<T: Ord + Clone> BitXor<&BTreeSet<T>> for &BTreeSet<T> {
12811286 /// let b = BTreeSet::from([2, 3, 4]);
12821287 ///
12831288 /// let result = &a ^ &b;
1284- /// let result_vec: Vec<_> = result.into_iter().collect();
1285- /// assert_eq!(result_vec, [1, 4]);
1289+ /// assert_eq!(result, BTreeSet::from([1, 4]));
12861290 /// ```
12871291 fn bitxor ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1288- self . symmetric_difference ( rhs) . cloned ( ) . collect ( )
1292+ BTreeSet :: from_sorted_iter ( self . symmetric_difference ( rhs) . cloned ( ) )
12891293 }
12901294}
12911295
@@ -1304,11 +1308,10 @@ impl<T: Ord + Clone> BitAnd<&BTreeSet<T>> for &BTreeSet<T> {
13041308 /// let b = BTreeSet::from([2, 3, 4]);
13051309 ///
13061310 /// let result = &a & &b;
1307- /// let result_vec: Vec<_> = result.into_iter().collect();
1308- /// assert_eq!(result_vec, [2, 3]);
1311+ /// assert_eq!(result, BTreeSet::from([2, 3]));
13091312 /// ```
13101313 fn bitand ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1311- self . intersection ( rhs) . cloned ( ) . collect ( )
1314+ BTreeSet :: from_sorted_iter ( self . intersection ( rhs) . cloned ( ) )
13121315 }
13131316}
13141317
@@ -1327,11 +1330,10 @@ impl<T: Ord + Clone> BitOr<&BTreeSet<T>> for &BTreeSet<T> {
13271330 /// let b = BTreeSet::from([3, 4, 5]);
13281331 ///
13291332 /// let result = &a | &b;
1330- /// let result_vec: Vec<_> = result.into_iter().collect();
1331- /// assert_eq!(result_vec, [1, 2, 3, 4, 5]);
1333+ /// assert_eq!(result, BTreeSet::from([1, 2, 3, 4, 5]));
13321334 /// ```
13331335 fn bitor ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1334- self . union ( rhs) . cloned ( ) . collect ( )
1336+ BTreeSet :: from_sorted_iter ( self . union ( rhs) . cloned ( ) )
13351337 }
13361338}
13371339
0 commit comments