# `boost::unordered_[multi]set` benchmarks Automated benchmarks of `boost::unordered_[multi]set` against `std::unordered_[multi]set` and Boost.MultiIndex. ## Benchmarks * `unique_running_insertion.cpp`: insertion of *n* random `unsigned int`s into a set, *n* = 10,000 to 3M. * `non_unique_running_insertion.cpp`: same as above, but the container is a multiset and elements are repeated an average of 5 times. * `unique_scattered_erasure.cpp`: erasure by iterator in random order of the *n* elements of a set filled as above. * `non_unique_scattered_erasure.cpp`: same as prior, but with multisets. * `non_unique_scattered_erasure_by_key.cpp`: erasure by key of all the elements of a multiset of `std::string`s filled with random strings with average repetition 5, *n* = 10,000 to 3M. * `unique_scattered_lookup.cpp`: * Successful: lookup of the *n* keys of the container in the same order as inserted. * Unsuccesful: lookup of _n_ random keys not related to those inserted (and thus not present in the container with probabilty ~100%). * `non_unique_scattered_lookup.cpp`: same as prior, but with multisets. ## How to read the results ### Folder * `gcc`: GCC 12 with libstdc++-v3, 64 bits * `clang_libcpp`: Clang 15 with libc++, 64 bits * `vs`: Visual Studio 2022 with (formerly known as) Dinkumware stdlib implementation, 64 bits ### Excel file * `running insertion.xlsx`: results of `unique_running_insertion.cpp` and `non_unique_running_insertion.cpp` * `scattered erasure.xlsx`: results of `unique_scattered_erasure.cpp` and `non_unique_scattered_erasure.cpp` * `scattered erasure by key.xlsx`: results of `non_unique_scattered_erasure_by_key.cpp` * `scattered successful looukp.xlsx`: results of `unique_scattered_lookup.cpp` and `non_unique_scattered_lookup.cpp`, successful case * `scattered unsuccessful looukp.xlsx`: results of `unique_scattered_lookup.cpp` and `non_unique_scattered_lookup.cpp`, unsuccessful case ### Tab (inside each Excel file) * `practice`: Without duplicate elements (sets) * `practice non-unique`: With duplicate elements (multisets) * `practice non-unique 5`: Same as above, but the maximum load factor is set to 5 * `practice norehash`: (Insertion only) same as `practice`, but `reserve` is called prior to insertion * `practice norehash non-unique`: (Insertion only) same as `practice non-unique`, but `reserve` is called prior to insertion * `practice norehash non-unique 5`: (Insertion only) same as `practice non-unique 5`, but `reserve` is called prior to insertion ## Graphs ### GCC 12 + libstdc++-v3 #### Insertion |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| |||| |:-:|:-:|:-:| |non-duplicate elements,
prior `reserve`|duplicate elements,
prior `reserve`|duplicate elements,
max load factor 5,
prior `reserve`| #### Erasure |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| ||| |:-:|:-:| |by key,
duplicate elements|by key,
duplicate elements,
max load factor 5| #### Successful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| #### Unsuccessful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| ### Clang 15 + libc++ #### Insertion |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| |||| |:-:|:-:|:-:| |non-duplicate elements,
prior `reserve`|duplicate elements,
prior `reserve`|duplicate elements,
max load factor 5,
prior `reserve`| #### Erasure |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| ||| |:-:|:-:| |by key,
duplicate elements|by key,
duplicate elements,
max load factor 5| #### Successful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| #### Unsuccessful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| ### Visual Studio 2022 + Dinkumware #### Insertion |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| |||| |:-:|:-:|:-:| |non-duplicate elements,
prior `reserve`|duplicate elements,
prior `reserve`|duplicate elements,
max load factor 5,
prior `reserve`| #### Erasure |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| ||| |:-:|:-:| |by key,
duplicate elements|by key,
duplicate elements,
max load factor 5| #### Successful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5| #### Unsuccessful lookup |||| |:-:|:-:|:-:| |non-duplicate elements|duplicate elements|duplicate elements,
max load factor 5|