@@ -33,6 +33,7 @@ enum Scenario {
3333 MULTIMAP ,
3434 HASH_MAP ,
3535 STD_MAP ,
36+ STD_MULTIMAP ,
3637};
3738
3839using payload_t = int ;
@@ -48,7 +49,13 @@ using TestIndex = typename std::conditional_t<
4849 typename std::conditional_t <
4950 SCENARIO == HASH_MAP ,
5051 b_plus_tree_hash_map<key_t , payload_t >,
51- std::map<key_t , payload_t >>>>;
52+ typename std::conditional_t <
53+ SCENARIO == STD_MAP ,
54+ std::map<key_t , payload_t >,
55+ typename std::conditional_t <
56+ SCENARIO == STD_MULTIMAP ,
57+ std::multimap<key_t , payload_t >,
58+ void >>>>>;
5259
5360/*
5461 * Benchmark for adding entries to the index.
@@ -110,19 +117,7 @@ void IndexBenchmark<DIM, TYPE>::SetupWorld(benchmark::State& state) {
110117template <dimension_t DIM , Scenario TYPE >
111118void IndexBenchmark<DIM , TYPE >::Insert(benchmark::State& state, Index& tree) {
112119 switch (TYPE ) {
113- case MAP : {
114- for (size_t i = 0 ; i < num_entities_; ++i) {
115- tree.emplace (points_[i][0 ], (payload_t )i);
116- }
117- break ;
118- }
119- case MULTIMAP : {
120- for (size_t i = 0 ; i < num_entities_; ++i) {
121- tree.emplace (points_[i][0 ], (payload_t )i);
122- }
123- break ;
124- }
125- case HASH_MAP : {
120+ default : {
126121 for (size_t i = 0 ; i < num_entities_; ++i) {
127122 tree.emplace (points_[i][0 ], (payload_t )i);
128123 }
@@ -137,79 +132,90 @@ void IndexBenchmark<DIM, TYPE>::Insert(benchmark::State& state, Index& tree) {
137132} // namespace
138133
139134template <typename ... Arguments>
140- void PhTree3D_MAP_INS_3 (benchmark::State& state, Arguments&&... arguments) {
135+ void BPT_MAP_INS_3D (benchmark::State& state, Arguments&&... arguments) {
141136 IndexBenchmark<3 , MAP > benchmark{state, arguments...};
142137 benchmark.Benchmark (state);
143138}
144139
145140template <typename ... Arguments>
146- void PhTree4D_MAP_INS_4 (benchmark::State& state, Arguments&&... arguments) {
141+ void BPT_MAP_INS_4D (benchmark::State& state, Arguments&&... arguments) {
147142 IndexBenchmark<4 , MAP > benchmark{state, arguments...};
148143 benchmark.Benchmark (state);
149144}
150145
151146template <typename ... Arguments>
152- void PhTree6D_MAP_INS_6 (benchmark::State& state, Arguments&&... arguments) {
147+ void BPT_MAP_INS_6D (benchmark::State& state, Arguments&&... arguments) {
153148 IndexBenchmark<6 , MAP > benchmark{state, arguments...};
154149 benchmark.Benchmark (state);
155150}
156151
157152template <typename ... Arguments>
158- void PhTree3D_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
153+ void BPT_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
159154 IndexBenchmark<3 , MAP > benchmark{state, arguments...};
160155 benchmark.Benchmark (state);
161156}
162157
163158template <typename ... Arguments>
164- void PhTree3D_MM_INS (benchmark::State& state, Arguments&&... arguments) {
159+ void BPT_MM_INS (benchmark::State& state, Arguments&&... arguments) {
165160 IndexBenchmark<3 , MULTIMAP > benchmark{state, arguments...};
166161 benchmark.Benchmark (state);
167162}
168163
169164template <typename ... Arguments>
170- void PhTree3D_HM_INS (benchmark::State& state, Arguments&&... arguments) {
165+ void BPT_HM_INS (benchmark::State& state, Arguments&&... arguments) {
171166 IndexBenchmark<3 , HASH_MAP > benchmark{state, arguments...};
172167 benchmark.Benchmark (state);
173168}
174169
175170template <typename ... Arguments>
176- void PhTree3D_STD_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
177- IndexBenchmark<3 , HASH_MAP > benchmark{state, arguments...};
171+ void STD_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
172+ IndexBenchmark<3 , STD_MAP > benchmark{state, arguments...};
173+ benchmark.Benchmark (state);
174+ }
175+
176+ template <typename ... Arguments>
177+ void STD_MULTIMAP_INS (benchmark::State& state, Arguments&&... arguments) {
178+ IndexBenchmark<3 , STD_MULTIMAP > benchmark{state, arguments...};
178179 benchmark.Benchmark (state);
179180}
180181
181182// index type, scenario name, data_generator, num_entities, function_to_call
182- BENCHMARK_CAPTURE (PhTree3D_MAP_INS_3 , MAP , 0.0 )
183+ BENCHMARK_CAPTURE (BPT_MAP_INS_3D , MAP , 0.0 )
183184 ->RangeMultiplier (2 )
184185 ->Ranges({{2 , 8 }, {TestGenerator::CUBE , TestGenerator::CUBE }})
185186 ->Unit(benchmark::kMillisecond );
186187
187- BENCHMARK_CAPTURE (PhTree4D_MAP_INS_4 , MAP , 0.0 )
188+ BENCHMARK_CAPTURE (BPT_MAP_INS_4D , MAP , 0.0 )
188189 ->RangeMultiplier (2 )
189190 ->Ranges({{2 , 16 }, {TestGenerator::CUBE , TestGenerator::CUBE }})
190191 ->Unit(benchmark::kMillisecond );
191192
192- BENCHMARK_CAPTURE (PhTree6D_MAP_INS_6 , MAP , 0.0 )
193+ BENCHMARK_CAPTURE (BPT_MAP_INS_6D , MAP , 0.0 )
193194 ->RangeMultiplier (2 )
194195 ->Ranges({{2 , 32 }, {TestGenerator::CUBE , TestGenerator::CUBE }})
195196 ->Unit(benchmark::kMillisecond );
196197
197- BENCHMARK_CAPTURE (PhTree3D_MAP_INS, MAP , 0.0 )
198+ BENCHMARK_CAPTURE (BPT_MAP_INS , MAP , 0.0 )
199+ ->RangeMultiplier (10 )
200+ ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER , TestGenerator::CUBE }})
201+ ->Unit(benchmark::kMillisecond );
202+
203+ BENCHMARK_CAPTURE (BPT_MM_INS , MULTIMAP , 0.0 )
198204 ->RangeMultiplier (10 )
199205 ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER , TestGenerator::CUBE }})
200206 ->Unit(benchmark::kMillisecond );
201207
202- BENCHMARK_CAPTURE (PhTree3D_MM_INS, MULTIMAP , 0.0 )
208+ BENCHMARK_CAPTURE (BPT_HM_INS , HASH_MAP , 0.0 )
203209 ->RangeMultiplier (10 )
204210 ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER , TestGenerator::CUBE }})
205211 ->Unit(benchmark::kMillisecond );
206212
207- BENCHMARK_CAPTURE (PhTree3D_HM_INS, HASH_MAP , 0.0 )
213+ BENCHMARK_CAPTURE (STD_MULTIMAP_INS , STD_MULTIMAP , 0.0 )
208214 ->RangeMultiplier (10 )
209215 ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER , TestGenerator::CUBE }})
210216 ->Unit(benchmark::kMillisecond );
211217
212- BENCHMARK_CAPTURE (PhTree3D_STD_MAP_INS , STD_MAP , 0.0 )
218+ BENCHMARK_CAPTURE (STD_MAP_INS , STD_MAP , 0.0 )
213219 ->RangeMultiplier (10 )
214220 ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER , TestGenerator::CUBE }})
215221 ->Unit(benchmark::kMillisecond );
0 commit comments