对于10^7的随机固定数列在g++4.8.1插入查找测试
通过下表使用 unorder_map时不要用insert插入
MAXN 10000000 (10^7) | 10次平均耗时单位(ms) |
【插入】 | |
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++)
{
//auto it = uset.find(in[i]);
//auto it = uset.count(in[i]);
//auto it = umap.find(in[i]);
//auto it = umap[in[i]];
//auto it = umap.count(in[i]);
//auto it= mp.find(in[i]);
//auto it= mp[in[i]];
auto it= stt.find(in[i]);
}
long long ed = clock();
sum += ed - st;
}
printf("%lld\n", sum / 10);
return 0;
}