#include <iostream>
#include <set>
#include <unordered_set>
#include <random>
#include <chrono>
template<typename T>
void fillTheContainerWithInts(T&, int);
template<typename T>
void calcFindTime(T const&, int);
int main()
{
int const n = 1000000;
std::cout << "set:\n";
std::set<int> s;
fillTheContainerWithInts(s, n);
calcFindTime(s, n);
std::cout << "\nunordered set:\n";
std::unordered_set<int> us;
fillTheContainerWithInts(us, n);
calcFindTime(us, n);
return 0;
}
template<typename T>
void fillTheContainerWithInts(T& c, int n)
{
for(int i = 0 ; i < n ; ++i)
c.insert(i);
}
template<typename T>
void calcFindTime(T const& c, int n)
{
typedef std::chrono::high_resolution_clock Clock;
typedef std::chrono::duration<double> sec;
Clock::time_point t0 = Clock::now();
for(int i = n ; i > 0 ; --i)
c.find(i);
Clock::time_point t1 = Clock::now();
std::cout << "Time duration in seconds for " << n << " elements: " << sec(t1 - t0).count() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGNocm9ubz4KIAogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgZmlsbFRoZUNvbnRhaW5lcldpdGhJbnRzKFQmLCBpbnQpOwogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgY2FsY0ZpbmRUaW1lKFQgY29uc3QmLCBpbnQpOwogCmludCBtYWluKCkKewoJaW50IGNvbnN0IG4gPSAxMDAwMDAwOwoJc3RkOjpjb3V0IDw8ICJzZXQ6XG4iOwoJc3RkOjpzZXQ8aW50PiBzOwoJZmlsbFRoZUNvbnRhaW5lcldpdGhJbnRzKHMsIG4pOwoJY2FsY0ZpbmRUaW1lKHMsIG4pOwoJc3RkOjpjb3V0IDw8ICJcbnVub3JkZXJlZCBzZXQ6XG4iOwoJc3RkOjp1bm9yZGVyZWRfc2V0PGludD4gdXM7CglmaWxsVGhlQ29udGFpbmVyV2l0aEludHModXMsIG4pOwoJY2FsY0ZpbmRUaW1lKHVzLCBuKTsKCSAKCXJldHVybiAwOwp9CiAKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBmaWxsVGhlQ29udGFpbmVyV2l0aEludHMoVCYgYywgaW50IG4pCnsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbiA7ICsraSkKCWMuaW5zZXJ0KGkpOwp9CiAKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBjYWxjRmluZFRpbWUoVCBjb25zdCYgYywgaW50IG4pCnsKCXR5cGVkZWYgc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jayBDbG9jazsKCXR5cGVkZWYgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4gc2VjOwoJQ2xvY2s6OnRpbWVfcG9pbnQgdDAgPSBDbG9jazo6bm93KCk7Cglmb3IoaW50IGkgPSBuIDsgaSA+IDAgOyAtLWkpCgljLmZpbmQoaSk7CgkgCglDbG9jazo6dGltZV9wb2ludCB0MSA9IENsb2NrOjpub3coKTsKCXN0ZDo6Y291dCA8PCAiVGltZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciAiIDw8IG4gPDwgIiBlbGVtZW50czogIiA8PCBzZWModDEgLSB0MCkuY291bnQoKSA8PCBzdGQ6OmVuZGw7Cn0=