I am currently experimenting on some usage of stl-datastructures. However I am still not sure when to use which one and when to use a certain combination. Currently I am trying
You have forgotten one very important alternative: not all sequences are created equal.
Especially, why a vector
and not a deque
or a list
?
Using list
A std::map
should perform roughly equivalently to a std::multimap
since list
is node based as well.
Using deque
A deque
is the default container to use when you don't know for which to go and do not have any special requirement.
With regard to the vector
, you trade up some read speed (not much) for faster push
and pop
operations.
Using a deque
instead, and some obvious optimizations, I get:
const uint32_t num_partitions = 100000;
const size_t num_elements = 500000;
Filling std::multimap: 360000 ticks
Filling MyMumap: 530000 ticks
Reading std::multimap: 70000 ticks (0)
Reading MyMumap: 30000 ticks (0)
Or in the "bad" case:
const uint32_t num_partitions = 100000;
const size_t num_elements = 200000;
Filling std::multimap: 100000 ticks
Filling MyMumap: 240000 ticks
Reading std::multimap: 30000 ticks (0)
Reading MyMumap: 10000 ticks (0)
Thus reading is unconditionally faster, but filling is also way slower.