@@ -1093,7 +1093,13 @@ impl<T: Ord> FromIterator<T> for BTreeSet<T> {
1093
1093
1094
1094
// use stable sort to preserve the insertion order.
1095
1095
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, ( ) ) ) ;
1097
1103
let map = BTreeMap :: bulk_build_from_sorted_iter ( iter) ;
1098
1104
BTreeSet { map }
1099
1105
}
@@ -1258,11 +1264,10 @@ impl<T: Ord + Clone> Sub<&BTreeSet<T>> for &BTreeSet<T> {
1258
1264
/// let b = BTreeSet::from([3, 4, 5]);
1259
1265
///
1260
1266
/// 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]));
1263
1268
/// ```
1264
1269
fn sub ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1265
- self . difference ( rhs) . cloned ( ) . collect ( )
1270
+ BTreeSet :: from_sorted_iter ( self . difference ( rhs) . cloned ( ) )
1266
1271
}
1267
1272
}
1268
1273
@@ -1281,11 +1286,10 @@ impl<T: Ord + Clone> BitXor<&BTreeSet<T>> for &BTreeSet<T> {
1281
1286
/// let b = BTreeSet::from([2, 3, 4]);
1282
1287
///
1283
1288
/// 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]));
1286
1290
/// ```
1287
1291
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 ( ) )
1289
1293
}
1290
1294
}
1291
1295
@@ -1304,11 +1308,10 @@ impl<T: Ord + Clone> BitAnd<&BTreeSet<T>> for &BTreeSet<T> {
1304
1308
/// let b = BTreeSet::from([2, 3, 4]);
1305
1309
///
1306
1310
/// 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]));
1309
1312
/// ```
1310
1313
fn bitand ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1311
- self . intersection ( rhs) . cloned ( ) . collect ( )
1314
+ BTreeSet :: from_sorted_iter ( self . intersection ( rhs) . cloned ( ) )
1312
1315
}
1313
1316
}
1314
1317
@@ -1327,11 +1330,10 @@ impl<T: Ord + Clone> BitOr<&BTreeSet<T>> for &BTreeSet<T> {
1327
1330
/// let b = BTreeSet::from([3, 4, 5]);
1328
1331
///
1329
1332
/// 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]));
1332
1334
/// ```
1333
1335
fn bitor ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
1334
- self . union ( rhs) . cloned ( ) . collect ( )
1336
+ BTreeSet :: from_sorted_iter ( self . union ( rhs) . cloned ( ) )
1335
1337
}
1336
1338
}
1337
1339
0 commit comments