|
@@ -8,23 +8,44 @@ using namespace std;
|
|
|
|
|
|
#include "tire.h"
|
|
|
|
|
|
-const int TABLE_SIZE = 5e4;
|
|
|
const int N = 1e5;
|
|
|
+const int M = 5e4;
|
|
|
const int M1 = 3;
|
|
|
const int M2 = 5;
|
|
|
|
|
|
struct Test {
|
|
|
- int num;
|
|
|
- string str;
|
|
|
+ int a;
|
|
|
+ short b;
|
|
|
+ int c;
|
|
|
};
|
|
|
|
|
|
vector<long long> umap_times;
|
|
|
vector<long long> tire_times;
|
|
|
|
|
|
-vector<string> table;
|
|
|
+vector<string> data_table;
|
|
|
+void init_data_table() {
|
|
|
+ for (int i = 0; i < N; ++i) {
|
|
|
+ string str = to_string(i + 1);
|
|
|
+ data_table.push_back(str);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+vector<string> target_table;
|
|
|
+void init_target_table() {
|
|
|
+ for (int i = 0; i < M; ++i) {
|
|
|
+ char str[32] = "";
|
|
|
+ int size = rand() % 30;
|
|
|
+ for (int j = 0; j < size; ++j) {
|
|
|
+ str[j] = (char)(rand() % 10) + '0';
|
|
|
+ }
|
|
|
+ str[size] = '\0';
|
|
|
+ target_table.push_back(str);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void umap_test(unordered_map<string, Test>& umap) {
|
|
|
auto start = chrono::high_resolution_clock::now();
|
|
|
- for (auto& target : table) {
|
|
|
+ for (auto& target : target_table) {
|
|
|
umap.find(target);
|
|
|
}
|
|
|
auto end = chrono::high_resolution_clock::now();
|
|
@@ -34,7 +55,7 @@ void umap_test(unordered_map<string, Test>& umap) {
|
|
|
|
|
|
void tire_test(Tire<Test>& tire) {
|
|
|
auto start = chrono::high_resolution_clock::now();
|
|
|
- for (auto& target : table) {
|
|
|
+ for (auto& target : target_table) {
|
|
|
tire.find(target);
|
|
|
}
|
|
|
auto end = chrono::high_resolution_clock::now();
|
|
@@ -54,39 +75,26 @@ void analysis(string name, vector<long long>& nums) {
|
|
|
cout << name << ": " << "maxn: " << maxn << "ms " << "minn: " << minn << "ms " << "avg: " << (1.0 * sum / n) << "ms " << "sum: " << sum << "ms " << endl;
|
|
|
}
|
|
|
|
|
|
-void print_times(string name, vector<long long>& nums) {
|
|
|
- cout << name << endl;
|
|
|
- for (long long& num : nums) {
|
|
|
- cout << num << " ";
|
|
|
- };
|
|
|
- cout << endl;
|
|
|
-}
|
|
|
-
|
|
|
int main() {
|
|
|
+ init_data_table();
|
|
|
+ init_target_table();
|
|
|
+
|
|
|
Tire<Test> tire;
|
|
|
unordered_map<string, Test> umap;
|
|
|
- for (int i = 0; i < TABLE_SIZE; ++i) {
|
|
|
- char str[32] = "";
|
|
|
- int size = rand() % 30;
|
|
|
- for (int j = 0; j < size; ++j) {
|
|
|
- str[j] = (char)(rand() % 256);
|
|
|
- }
|
|
|
- str[size] = '\0';
|
|
|
- table.push_back(str);
|
|
|
- }
|
|
|
|
|
|
- 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 });
|
|
|
- };
|
|
|
+ const int n = data_table.size();
|
|
|
+ for (int i = 0; i < n; ++i) {
|
|
|
+ Test t;
|
|
|
+ t.a = i;
|
|
|
+ t.c = n + i;
|
|
|
+ tire.insert(data_table[i], t);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < n; ++i) {
|
|
|
+ Test t;
|
|
|
+ t.a = i;
|
|
|
+ t.c = n + i;
|
|
|
+ umap.insert({ data_table[i], t });
|
|
|
+ }
|
|
|
|
|
|
// group 1
|
|
|
for (int i = 0; i < M1; ++i) {
|
|
@@ -117,8 +125,6 @@ int main() {
|
|
|
}
|
|
|
|
|
|
// 分析
|
|
|
- print_times("umap", umap_times);
|
|
|
- print_times("tire", tire_times);
|
|
|
analysis("umap", umap_times);
|
|
|
analysis("tire", tire_times);
|
|
|
return 0;
|