This test inserts a number of pairs into a container. The first item of each pair is a string from an arbitrary text [wickland96thirty], and the second is a uniform i.i.d.integer. The container is a "multimap" - it considers the first member of each pair as a primary key, and the second member of each pair as a secondary key (see Motivation::Associative Containers::Alternative to Multiple Equivalent Keys). There are 400 distinct primary keys, and the ratio of secondary keys to primary keys ranges from 1 to 5.
The test measures the average insert-time as a function of the number of values inserted. For pb_ds's containers, it inserts a primary key into the primary associative container, then a secondary key into the secondary associative container. For the native multimaps, it obtains a range using std::equal_range, and inserts a value only if it was not contained already.
(The test was executed with multimap_text_insert_timing_test thirty_years_among_the_dead_preproc.txt 400 1 1 6)
The test checks the insert-time scalability of different "multimap" designs (see Motivation::Associative Containers::Alternative to Multiple Equivalent Keys).
Figures NTG, NTM, and NTL show the results for "multimaps" which use a tree-based container for primary keys, in g++, msvc++, and local, respectively; Figures NHG, NHM, and NHL show the results for "multimaps" which use a hash-based container for primary keys, in g++, msvc++, and local, respectively.
In the above figure, the names in the legends have the following meaning:
In the above figure, the names in the legends have the following meaning:
In the above figure, the names in the legends have the following meaning:
In the above figure, the names in the legends have the following meaning: