about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorStepan Koltsov <stepan.koltsov@gmail.com>2019-11-10 23:47:23 +0000
committerStepan Koltsov <stepan.koltsov@gmail.com>2019-11-10 23:53:44 +0000
commit04a237b9e2c327e1ad6339afd2f967bfcad38483 (patch)
tree391475674b94604b630d8e11e693a9b1e2c057eb /src/libstd
parent3fc30d884ae0c988d98452a06737705cfe34806a (diff)
downloadrust-04a237b9e2c327e1ad6339afd2f967bfcad38483.tar.gz
rust-04a237b9e2c327e1ad6339afd2f967bfcad38483.zip
Fix HashSet::union performance
Consider this example: small_set = 0..2, large_set = 0..1000.

To efficiently compute the union of these sets, we should
* take all elements of the larger set
* for each element of the smaller set check it is not in the larger set

This is exactly what this commit does.

This particular optimization was implemented a year ago, but the
author mistaken `<` and `>`.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/collections/hash/set.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libstd/collections/hash/set.rs b/src/libstd/collections/hash/set.rs
index 092fb443468..a038ee80210 100644
--- a/src/libstd/collections/hash/set.rs
+++ b/src/libstd/collections/hash/set.rs
@@ -551,7 +551,7 @@ impl<T, S> HashSet<T, S>
     #[inline]
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn union<'a>(&'a self, other: &'a HashSet<T, S>) -> Union<'a, T, S> {
-        if self.len() <= other.len() {
+        if self.len() >= other.len() {
             Union {
                 iter: self.iter().chain(other.difference(self)),
             }