Skip to content

Instantly share code, notes, and snippets.

@convexbrain
Last active February 24, 2024 07:38
Show Gist options
  • Save convexbrain/668da800277bf608f4996961c75975af to your computer and use it in GitHub Desktop.
Save convexbrain/668da800277bf608f4996961c75975af to your computer and use it in GitHub Desktop.
Optionでくるむと重くなる?? #rustlang
use std::collections::BTreeSet;
fn func1(s: Option<BTreeSet<usize>>) -> BTreeSet<usize> {
let mut s = s.unwrap_or((0..100).collect());
s.pop_first();
s
}
fn func2(mut s: BTreeSet<usize>) -> BTreeSet<usize> {
s.pop_first();
s
}
fn main() {
let mut args = std::env::args();
args.next();
let f: usize = args.next().unwrap().parse().unwrap();
let n: usize = args.next().unwrap().parse().unwrap();
let mut s: BTreeSet<usize> = (0..n).collect();
while !s.is_empty() {
match f {
1 => {
s = func1(Some(s));
},
2 => {
s = func2(s);
},
_ => {
panic!();
},
}
}
}
@convexbrain
Copy link
Author

$ time cargo run -r 1 10000000
    Finished release [optimized] target(s) in 0.01s
     Running `target\release\test_btreeset.exe 1 10000000`

real    0m17.238s
user    0m0.000s
sys     0m0.000s
$ time cargo run -r 2 10000000
    Finished release [optimized] target(s) in 0.01s
     Running `target\release\test_btreeset.exe 2 10000000`

real    0m1.556s
user    0m0.000s
sys     0m0.000s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment