测试环境:
centos 6.5
gcc 4.4.3
使用boost库生成均匀分布的随机正整形数字。
1、分别创建三个数据集对象
typedef unsigned int UINT32;
std::unordered_map<UINT32,UINT32> test_map1;
std::map<UINT32,UINT32> test_map2;
std::unordered_set<UINT32> test_set2;
2、创建1000 000个0~999999之间的随机数字
每次测试分别将完全相同的随即数字组,分别放入三个容器。
3、仅测试查找的时间。一样是查找1000 000次。用find函数。
结果如下。r后面的数字表示,随即查找命中的次数。
后三个数字分别是对应的查找时间,单位是ms。
r:95092
test_map1:146ms
test_set2: 153
test_map2:279
r:95213
134
137
276
r:95222
150
139
287
r:95227
134
136
280
r:95205
133
132
273
结果来说:
unodered_map、unordered_set不相上下
但是map性能略微差一些。
之前我做过样本数据小一点的测试,大约10000个数字,依然是map性能差一些。
根据本次测试,
我会优先选用unodered_map、unordered_set做测试。