#include <iostream>
#include <unordered_set>
#include <set>
#include <chrono>
#include <random>
// Function to measure execution time
template<typename Func>
long long measureTime(Func func) {
auto start = std::chrono::high_resolution_clock::now();
func();
auto end = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
}
int main() {
const int NUM_ELEMENTS = 1000000;
const int NUM_SEARCHES = 10000;
std::unordered_set<int> uset;
std::set<int> set;
// Random number generation
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, NUM_ELEMENTS);
// Insertion
auto insertUnordered = [&]() {
for (int i = 0; i < NUM_ELEMENTS; ++i) {
uset.insert(dis(gen));
}
};
auto insertOrdered = [&]() {
for (int i = 0; i < NUM_ELEMENTS; ++i) {
set.insert(dis(gen));
}
};
std::cout << "Insertion time (microseconds):" << std::endl;
std::cout << "unordered_set: " << measureTime(insertUnordered) << std::endl;
std::cout << "set: " << measureTime(insertOrdered) << std::endl;
// Search
auto searchUnordered = [&]() {
for (int i = 0; i < NUM_SEARCHES; ++i) {
uset.find(dis(gen));
}
};
auto searchOrdered = [&]() {
for (int i = 0; i < NUM_SEARCHES; ++i) {
set.find(dis(gen));
}
};
std::cout << "Search time (microseconds):" << std::endl;
std::cout << "unordered_set: " << measureTime(searchUnordered) << std::endl;
std::cout << "set: " << measureTime(searchOrdered) << std::endl;
return 0;
}