analysis.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <unordered_map>
  5. #include <chrono>
  6. using namespace std;
  7. #include "tire.h"
  8. #include "tire.cpp"
  9. struct Test {
  10. int num;
  11. string str;
  12. };
  13. vector<long long> umap_times;
  14. vector<long long> tire_times;
  15. void umap_test(unordered_map<string, Test>& umap) {
  16. auto start = chrono::high_resolution_clock::now();
  17. for (auto& [_, item] : umap) {
  18. }
  19. auto end = chrono::high_resolution_clock::now();
  20. auto duration = chrono::duration_cast<chrono::microseconds>(end - start);
  21. umap_times.push_back(duration.count());
  22. }
  23. void tire_test(Tire<Test>& tire) {
  24. auto start = chrono::high_resolution_clock::now();
  25. for (auto& item : tire) {
  26. }
  27. auto end = chrono::high_resolution_clock::now();
  28. auto duration = chrono::duration_cast<chrono::microseconds>(end - start);
  29. tire_times.push_back(duration.count());
  30. }
  31. void analysis(string name, vector<long long>& nums) {
  32. const int n = nums.size();
  33. long long maxn = LLONG_MIN, minn = LLONG_MAX;
  34. long long sum = 0;
  35. for (long long& num : nums) {
  36. maxn = max(maxn, num);
  37. minn = min(minn, num);
  38. sum += num;
  39. }
  40. cout << name << ": " << "maxn: " << maxn << "ms " << "minn: " << minn << "ms " << "avg: " << (1.0 * sum / n) << "ms " << "sum: " << sum << "ms " << endl;
  41. }
  42. void print_times(string name, vector<long long>& nums) {
  43. cout << name << endl;
  44. for (long long& num : nums) {
  45. cout << num << " ";
  46. };
  47. cout << endl;
  48. }
  49. int main() {
  50. const int N = 1e6;
  51. Tire<Test> tire;
  52. unordered_map<string, Test> umap;
  53. for (int i = 0; i < N; ++i) {
  54. Test test;
  55. test.num = i + 1;
  56. test.str = to_string(i + 1);
  57. tire.insert(test.str, test);
  58. };
  59. for (int i = 0; i < N; ++i) {
  60. Test test;
  61. test.num = i + 1;
  62. test.str = to_string(i + 1);
  63. umap.insert({ test.str, test });
  64. };
  65. // group 1
  66. umap_test(umap);
  67. tire_test(tire);
  68. umap_test(umap);
  69. tire_test(tire);
  70. umap_test(umap);
  71. tire_test(tire);
  72. // group 2
  73. tire_test(tire);
  74. umap_test(umap);
  75. tire_test(tire);
  76. umap_test(umap);
  77. tire_test(tire);
  78. umap_test(umap);
  79. // group 3
  80. umap_test(umap);
  81. umap_test(umap);
  82. umap_test(umap);
  83. umap_test(umap);
  84. umap_test(umap);
  85. tire_test(tire);
  86. tire_test(tire);
  87. tire_test(tire);
  88. tire_test(tire);
  89. tire_test(tire);
  90. // group 4
  91. tire_test(tire);
  92. tire_test(tire);
  93. tire_test(tire);
  94. tire_test(tire);
  95. tire_test(tire);
  96. umap_test(umap);
  97. umap_test(umap);
  98. umap_test(umap);
  99. umap_test(umap);
  100. umap_test(umap);
  101. // 分析
  102. print_times("umap", umap_times);
  103. print_times("tire", tire_times);
  104. analysis("umap", umap_times);
  105. analysis("tire", tire_times);
  106. return 0;
  107. }