@@ -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