memory_1e5.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <unordered_map>
  5. #include <chrono>
  6. #include <cstdlib>
  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() {
  28. const int n = data_table.size();
  29. unordered_map<string, Test> umap;
  30. for (int i = 0; i < n; ++i) {
  31. Test t;
  32. t.a = i;
  33. t.c = n + i;
  34. umap.insert({ data_table[i], t });
  35. }
  36. for (int i = N * 2; i >= 0; i -= 17) {
  37. size_t res = umap.erase(to_string(i + 1));
  38. };
  39. cout << "umap ";
  40. system("pause");
  41. }
  42. void tire_test() {
  43. const int n = data_table.size();
  44. Tire<Test> tire;
  45. for (int i = 0; i < n; ++i) {
  46. Test t;
  47. t.a = i;
  48. t.c = n + i;
  49. tire.insert(data_table[i], t);
  50. }
  51. for (int i = N * 2; i >= 0; i -= 17) {
  52. size_t res = tire.erase(to_string(i + 1));
  53. };
  54. cout << "tire ";
  55. system("pause");
  56. }
  57. void analysis(string name, vector<long long>& nums) {
  58. const int n = nums.size();
  59. long long maxn = LLONG_MIN, minn = LLONG_MAX;
  60. long long sum = 0;
  61. for (long long& num : nums) {
  62. maxn = max(maxn, num);
  63. minn = min(minn, num);
  64. sum += num;
  65. }
  66. cout << name << ": " << "maxn: " << maxn << "ms " << "minn: " << minn << "ms " << "avg: " << (1.0 * sum / n) << "ms " << "sum: " << sum << "ms " << endl;
  67. }
  68. void print_times(string name, vector<long long>& nums) {
  69. cout << name << endl;
  70. for (long long& num : nums) {
  71. cout << num << " ";
  72. };
  73. cout << endl;
  74. }
  75. int main() {
  76. init_data_table();
  77. // group 1
  78. for (int i = 0; i < M1; ++i) {
  79. umap_test();
  80. tire_test();
  81. }
  82. // group 2
  83. for (int i = 0; i < M1; ++i) {
  84. tire_test();
  85. umap_test();
  86. }
  87. return 0;
  88. }