fork download
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <sys/time.h>
  5. #include <vector>
  6. #include <set>
  7. #include <unordered_set>
  8. #include <string>
  9. #include <iostream>
  10. #include <algorithm>
  11.  
  12. int main(int argc,char**argv,char**envp)
  13. {
  14. struct timespec t2, t3; double t; int f1,f2,f3;
  15. std::vector<std::string> v;
  16. std::set<std::string> s;
  17. std::unordered_set<std::string> us;
  18.  
  19. std::cout << "insert:\n";
  20. clock_gettime(CLOCK_MONOTONIC, &t2);
  21. for(int i=100000;i;--i)for (char **p=envp;*p;++p) v.push_back(*p);
  22. clock_gettime(CLOCK_MONOTONIC, &t3);
  23. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
  24.  
  25. clock_gettime(CLOCK_MONOTONIC, &t2);
  26. for(int i=100000;i;--i)for (char **p=envp;*p;++p) s.insert(*p);
  27. clock_gettime(CLOCK_MONOTONIC, &t3);
  28. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
  29.  
  30. clock_gettime(CLOCK_MONOTONIC, &t2);
  31. for(int i=100000;i;--i)for (char **p=envp;*p;++p) us.insert(*p);
  32. clock_gettime(CLOCK_MONOTONIC, &t3);
  33. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
  34.  
  35. std::cout << v.size() << "\n" << s.size() << "\n" << us.size() << "\n";
  36. v.clear();for (char **p=envp;*p;++p) v.push_back(*p);
  37. std::cout << "\nfind(6):\n";
  38.  
  39. clock_gettime(CLOCK_MONOTONIC, &t2);
  40. for(int i=100000;i;--i) f1=find(v.begin(),v.end(),envp[2])!=v.end();
  41. clock_gettime(CLOCK_MONOTONIC, &t3);
  42. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
  43.  
  44. clock_gettime(CLOCK_MONOTONIC, &t2);
  45. for(int i=100000;i;--i) f2=s.find(envp[2])!=s.end();
  46. clock_gettime(CLOCK_MONOTONIC, &t3);
  47. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
  48.  
  49. clock_gettime(CLOCK_MONOTONIC, &t2);
  50. for(int i=100000;i;--i) f3=us.find(envp[2])!=us.end();
  51. clock_gettime(CLOCK_MONOTONIC, &t3);
  52. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
  53.  
  54. std::cout << v.size() << s.size() << us.size() << f1 << f2 << f3;
  55.  
  56. v.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) v.push_back(*p+std::to_string(i));}
  57. s.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) s.insert(*p+std::to_string(i));}
  58. us.clear();for(int i=100;i;--i){for (char **p=envp;*p;++p) us.insert(*p+std::to_string(i));}
  59. std::cout << "\n\nfind(600):\n";
  60.  
  61. clock_gettime(CLOCK_MONOTONIC, &t2);
  62. for(int i=100000;i;--i) f1=find(v.begin(),v.end(),envp[2])!=v.end();
  63. clock_gettime(CLOCK_MONOTONIC, &t3);
  64. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("vec %f\n", t);
  65.  
  66. clock_gettime(CLOCK_MONOTONIC, &t2);
  67. for(int i=100000;i;--i) f2=s.find(envp[2])!=s.end();
  68. clock_gettime(CLOCK_MONOTONIC, &t3);
  69. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("set %f\n", t);
  70.  
  71. clock_gettime(CLOCK_MONOTONIC, &t2);
  72. for(int i=100000;i;--i) f3=us.find(envp[2])!=us.end();
  73. clock_gettime(CLOCK_MONOTONIC, &t3);
  74. t = (t3.tv_sec - t2.tv_sec) *1000 + (t3.tv_nsec - t2.tv_nsec) / 1000000.; printf("uos %f\n", t);
  75.  
  76. std::cout << v.size() << s.size() << us.size() << f1 << f2 << f3;
  77. return 0;
  78. }
  79.  
  80.  
Success #stdin #stdout 3.25s 26808KB
stdin
Standard input is empty
stdout
insert:
vec 106.865881
set 160.374635
uos 150.259701
600000
6
6

find(6):
vec 14.932146
set 24.681489
uos 23.470656
666111

find(600):
vec 2620.137073
set 39.539914
uos 21.124151
600600600000