#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <sys/time.h>
#include <vector>
#include <set>
#include <unordered_set>
#include <string>
#include <iostream>
#include <algorithm>
int main(int argc,char**argv,char**envp)
{
struct timespec t2, t3; double t; int f1,f2,f3;
std::vector<std::string> v;
std::set<std::string> s;
std::unordered_set<std::string> us;
std::cout << "insert:\n";
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i)for (char **p=envp;*p;++p) v.push_back(*p);
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i)for (char **p=envp;*p;++p) s.insert(*p);
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i)for (char **p=envp;*p;++p) us.insert(*p);
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
std::cout << v.size() << "\n" << s.size() << "\n" << us.size() << "\n";
v.clear();for (char **p=envp;*p;++p) v.push_back(*p);
std::cout << "\nfind(6):\n";
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f1=find(v.begin(),v.end(),envp[2])!=v.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f2=s.find(envp[2])!=s.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f3=us.find(envp[2])!=us.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
std::cout << v.size() << s.size() << us.size() << f1 << f2 << f3;
v.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) v.push_back(*p+std::to_string(i));}
s.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) s.insert(*p+std::to_string(i));}
us.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) us.insert(*p+std::to_string(i));}
std::cout << "\n\nfind(600):\n";
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f1=find(v.begin(),v.end(),envp[2])!=v.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f2=s.find(envp[2])!=s.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
clock_gettime(CLOCK_MONOTONIC, &t2);
for(int i=100000;i;--i) f3=us.find(envp[2])!=us.end();
clock_gettime(CLOCK_MONOTONIC, &t3);
t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
std::cout << v.size() << s.size() << us.size() << f1 << f2 << f3;
return 0;
}