analysis1.cpp 2.3 KB

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