iterator_example.cpp 2.3 KB

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