菜鸟笔记
提升您的技术认知

map hash-ag真人游戏

测试条件: gcc version 4.2.1 20070719  [freebsd] freebsd  7.2-release #0: fri may  1 07:18:07 utc 2009     [email protected]:/usr/obj/usr/src/sys/generic  amd64

intel(r) xeon(r) cpu           e5620  @ 2.40ghz 16核

测试程序说明: 先准备好n个字符串随机的md5字符串做为key,然后分别对3个容器进行插入、遍历、查找、删除操作。 例如,n=100的时候,插入是指插入100个随机md5 key;遍历是指对容器遍历一次;查找是指分别对这个100个随机的md5 key做查找操作(即查找100次);删除是指挨个删除这个100个随机md5 key。

测试数据如下表:

插入,单位us 100 1k 10k 100k 1m 10m
std::map 241 2833 35888 381214 4439088 62233380
std::ext/hash_map 97 1667 16466 146025 1788446 18512639
std::tr1::unordered_map 77 772 8052 53094 658312 7429297
遍历,单位us 100 1k 10k 100k 1m 10m
std::map 11 76 842 11603 155700 1771906
std::ext/hash_map 47 430 4218 39880 470344 4781575
std::tr1::unordered_map 1 1 2 1 2 1
查找,单位us 100 1k 10k 100k 1m 10m
std::map 156 2111 30456 258709 4100260 59064394
std::ext/hash_map 77 774 8056 56974 660231 7705527
std::tr1::unordered_map 77 772 8051 54456 659537 7600263
删除,单位us 100 1k 10k 100k 1m 10m
std::map 291 3641 49584 472414 6675897 92491113
std::ext/hash_map 89 869 9068 86524 964767 10372650
std::tr1::unordered_map 49 480 4879 33087 395098 4369617

结论: 1. std::tr1::unordered_map 与 std::ext/hash_map       任何情况下,如果要在这两个容器之间选择的话,
我们毫不犹豫应该选择 unordered_map。因为他的性能在上述4中操作中均优于 hash_map,甚至可以说远远优于 hash_map。

2. std::tr1::unordered_map 与 std::map       map的性能总体来说是最差的。但是,
当我们需要一个有序的关联容器的时候,我们必须选择std::map,因为 unordered_map 内部元素不是有序的,这一点从名字都可以看出来。除此之外都应该选择 unordered_map 。

3. 上述测试中,unordered_map 的遍历性能几乎是常数级别的,与常识不太相符,需要再研究研究。

附录:贴上源代码 说明:与测试程序稍有区别,这里的源码里没有md5相关的代码以确保其他人能比较方便的直接拿去编译运行。

如有错误还请跟帖指出,非常感谢。

#include 
#include 
#include 
#include 
#include 
网站地图