//------------------------------------------------------------- // map.cc: ./map --benchmark_time_unit=ms //------------------------------------------------------------- #include #include #include #include #include #include #include #include //------------------------------------------------------------- const std::size_t N = 1000; std::default_random_engine engine; std::uniform_int_distribution distribution_key(0, N); std::uniform_int_distribution distribution_value('a', 'z'); auto rng_key = [] { return distribution_key(engine); }; auto rng_value = [] { return distribution_value(engine); }; //------------------------------------------------------------- template void general(benchmark::State &state) { C container; engine.seed(0); for (auto _: state) for (size_t i = 0; i < N; ++i) { auto key = rng_key(); auto value = rng_value(); switch (key % 10) { case 0: container[key] = value; break; case 1: try { std::ignore = container.at(key); } catch(...) {}; break; case 2: container.insert({key, value}); break; case 3: std::ignore = container.find(key); break; case 4: container.erase(key); break; case 5: std::ignore = container.count(key); break; case 6: std::ignore = container.contains(key); break; case 7: std::ignore = container.equal_range(key); break; case 8: std::ignore = container.empty(); break; case 9: std::ignore = container.size(); break; } } } //------------------------------------------------------------- template void prefilled(benchmark::State &state) { C container; engine.seed(0); for (size_t i = 0; i < N; ++i) { container[rng_key()] = rng_value(); } for (auto _: state) for (size_t i = 0; i < N; ++i) { auto key = rng_key(); switch (key % 8) { case 0: try { std::ignore = container.at(key); } catch(...) {}; break; case 1: std::ignore = container.find(key); break; case 2: std::ignore = container.count(key); break; case 3: std::ignore = container.count(key); break; case 4: std::ignore = container.contains(key); break; case 5: std::ignore = container.equal_range(key); break; case 6: std::ignore = container.empty(); break; case 7: std::ignore = container.size(); break; } } } //------------------------------------------------------------- BENCHMARK(general>); BENCHMARK(general>); BENCHMARK(general>); BENCHMARK(general>); BENCHMARK(general>); BENCHMARK(prefilled>); BENCHMARK(prefilled>); BENCHMARK(prefilled>); BENCHMARK(prefilled>); BENCHMARK(prefilled>); BENCHMARK_MAIN(); //-------------------------------------------------------------