map hash_map unordered_map 性能测试

转自:http://blog.chinaunix.net/uid-20384806-id-3055333.html

测试条件:
gcc version 4.2.1 20070719  [FreeBSD]
FreeBSD  7.2-RELEASE #0: Fri May  1 07:18:07 UTC 2009     root@driscoll.cse.buffalo.edu:/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。

测试数据如下表:

插入,单位us1001K10K100K1M10M
std::map241283335888381214443908862233380
std::ext/hash_map97166716466146025178844618512639
std::tr1::unordered_map777728052530946583127429297


遍历,单位us1001K10K100K1M10M
std::map1176842116031557001771906
std::ext/hash_map474304218398804703444781575
std::tr1::unordered_map112121

查找,单位us1001K10K100K1M10M
std::map156211130456258709410026059064394
std::ext/hash_map777748056569746602317705527
std::tr1::unordered_map777728051544566595377600263

删除,单位us1001K10K100K1M10M
std::map291364149584472414667589792491113
std::ext/hash_map8986990688652496476710372650
std::tr1::unordered_map494804879330873950984369617

结论:
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 的遍历性能几乎是常数级别的,与常识不太相符,需要再研究研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值