#include <map>
#include <unordered_map>
#include <cstdio>
#include <ctime>
#include <random>
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
/*
std::mt19937 gen1 (std::chrono::system_clock::now().time_since_epoch().count()); // seed = time
std::mt19937 gen2 (239); // seed = const
std::random_device seed_generator; // slow, but good enough to get a seed. ONLY LINUX.
std::mt19937 gen3 (seed_generator()); // seed = random_device
std::cout << gen1() << std::endl; // 32-bit
std::cout << gen2() << std::endl; // 32-bit
std::cout << gen3() << std::endl; // 32-bit
std::uniform_real_distribution<double> gen_double(2, 3);
std::cout << gen_double(gen2) << std::endl; // double [2..3]
std::cout << gen_double(gen3) << std::endl; // double [2..3]
std::uniform_int_distribution<int> gen_int(2, 4);
std::cout << gen_int(gen2) << std::endl; // int [2..4]
std::cout << gen_int(gen3) << std::endl; // int [2..4]
*/
void timeS( const char *s = 0 ) {
static double start = 0;
fprintf(stderr, "time = %.2f : %s\n",
(clock() - start) / CLOCKS_PER_SEC, s ? s : "");
start = clock();
}
int main() {
const int n = 1e6;
map<int, int> m1;
unordered_map<int, int> m2(n);
std::mt19937 gen(239);
vector<int> a(n);
forn(i, n) a[i] = gen(); // 32-bit random
timeS("gen");
forn(i, n) m1[a[i]] = i;
timeS("map");
forn(i, n) m2[a[i]] = i;
timeS("unordered_map");
}