对于10^7的随机固定数列在g++4.8.1插入查找测试
通过下表使用 unorder_map时不要用insert插入
【插入】 | |
unordered_set::insert(int) | 259 |
unordered_map[int] = int | 296 |
unordered_map .insert() | 3000 |
map[int] = int | 1601 |
set::insert(int) | 1703 |
【查找】 | |
unordered_set::find(int) | 108 |
unordered_set::count(int) | 156 |
unordered_map::find(int) | 112 |
int=unordered_map[int] | 134 |
unordered_map::count(int) | 162 |
map::find(int) | 1414 |
int = map[int] | 1426 |
set:find(int) | 1425 |
【测试程序】
#include <time.h> #include <cstdio> #include <cstdlib> #include <unordered_map> #include <unordered_set> #include <map> #include <set> #include <algorithm> using namespace std; #define MAXN 10000000 #define MOD 1000000000 unordered_set<int> uset; unordered_map<int, int> umap; map<int, int> mp; set<int> stt; int in[MAXN]; int main() { srand(0); long long sum = 0; int t = 10; uset.clear(); umap.clear(); mp.clear(); stt.clear(); for (int i = 0; i < MAXN; i++) { in[i] = rand() % MOD; //uset.insert(in[i]); //umap[in[i]] = i; //mp[in[i]] = i; stt.insert(in[i]); } while (t--) { long long st = clock(); for (int i = 0; i < MAXN; i++) { //const auto it = uset.find(in[i]); //const auto it = uset.count(in[i]); //const auto it = umap.find(in[i]); //const auto it = umap[in[i]]; //const auto it = umap.count(in[i]); //const auto it= mp.find(in[i]); //const auto it= mp[in[i]]; const auto it= stt.find(in[i]); } long long ed = clock(); sum += ed - st; } printf("%lld\n", sum / 10); return 0; }