#include #include #include #include #include using namespace std; #include "tire.h" const int N = 1e5; const int M1 = 3; const int M2 = 5; struct Test { int num; string str; }; vector umap_times; vector tire_times; void umap_test(unordered_map& umap) { auto start = chrono::high_resolution_clock::now(); for (auto& [_, item] : umap) { } auto end = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast(end - start); umap_times.push_back(duration.count()); } void tire_test(Tire& tire) { auto start = chrono::high_resolution_clock::now(); for (auto& item : tire) { } auto end = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast(end - start); tire_times.push_back(duration.count()); } void analysis(string name, vector& nums) { const int n = nums.size(); long long maxn = 0, minn = 0x7fffffffffffffff; long long sum = 0; for (long long& num : nums) { maxn = max(maxn, num); minn = min(minn, num); sum += num; } cout << name << ": " << "maxn: " << maxn << "ms " << "minn: " << minn << "ms " << "avg: " << (1.0 * sum / n) << "ms " << "sum: " << sum << "ms " << endl; } void print_times(string name, vector& nums) { cout << name << endl; for (long long& num : nums) { cout << num << " "; }; cout << endl; } int main() { Tire tire; unordered_map umap; for (int i = 0; i < N; ++i) { Test test; test.num = i + 1; test.str = to_string(i + 1); tire.insert(test.str, test); }; for (int i = 0; i < N; ++i) { Test test; test.num = i + 1; test.str = to_string(i + 1); umap.insert({ test.str, test }); }; // group 1 for (int i = 0; i < M1; ++i) { umap_test(umap); tire_test(tire); } // group 2 for (int i = 0; i < M1; ++i) { tire_test(tire); umap_test(umap); } // group 3 for (int i = 0; i < M2; ++i) { umap_test(umap); } for (int i = 0; i < M2; ++i) { tire_test(tire); } // group 4 for (int i = 0; i < M2; ++i) { tire_test(tire); } for (int i = 0; i < M2; ++i) { umap_test(umap); } // 分析 print_times("umap", umap_times); print_times("tire", tire_times); analysis("umap", umap_times); analysis("tire", tire_times); return 0; }