#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");
}