想在工程里使用STL,但一直怀疑STL的效率,所以作了一下简单的测试,结果很让我吃惊。
测试方法:
用std::map与自己实现的CHashMap进行比较,分别插入并查询10000个键值
结果:
Release编译 Debug编译
std::map耗时 CHashMap耗时 std::map耗时 CHashMap耗时
插入10000个键值 0.018923秒 0.000421秒 0.161889秒 0.001955秒
查询10000个键值 0.001435秒 0.000233秒 0.061445秒 0.001808秒
结论:
在Release编译下,std::map在插入键值时速度比CHashMap慢了50倍,查询则慢了7倍!开始我很怀疑这个数据,但重复测试多次后,结果仍然一样。我又将std::map改为std::hash_map,结果还在一样(有细微差别,可忽略)。
以前看过很多文章,均建议使用STL,并且不要企图超越STL,我想这些建议应该是针对STL的通用性、与平台无关性,但就效率而言,STL并非最佳选择!
如果工程中的关键代码对效率要求极高,我觉得在这种地方要慎用STL。初学者不能被大量的STL赞歌所误导了,如果对某一模块的效率没有把握,最好的方法就是做测试,用数据说话。
另外:
我也是刚开始用STL,不知以上对std::map、std::hash_map的测试是否得当,请各位大侠不赐教。致少有一点我现在是迷惑的:std::map/std::hash_map不需要初始化容器的大小,我想它的内部实现是根据插入键值的多少自动分配容器大小,这势必会影响效率。我试着先往std::map/std::hash_map里插入10000个键值,然后清空,我认为这时它应该已分配敢足够的容器,然后再去测试插入10000的键值的时间,结果耗时依然不变!这就有点奇怪了!为什么std::map/std::hash_map的插入操作这么慢??
[此贴子已经被作者于2006-12-15 11:13:29编辑过]