hash_map不是标准库,因此不同平台下包含头文件不同, 前缀也不同,这里使用了一个通用定义
1: #ifdef _WIN32
2: #include <hash_map>
3: #define HASHMAP_PREFIX stdext
4: #else
5: #include <ext/hash_map>
6: #define HASHMAP_PREFIX __gnu_cxx
7: #endif
对于初始桶大小设置,Linux下使用hash_map构造函数可以设置, Windows下则没有对应的设置函数.
查阅Windows下hash_map的源码,并在hash_map()默认构造函数旁边添加一个测试用初始桶设置函数
1: hash_map( size_type _Buckets )
2: : _Mybase(key_compare(), allocator_type())
接下来使用相同的测试代码
1: const uint32 Buckets = 1000;
2: HASHMAP_PREFIX::hash_map<uint32,uint32> MyHash( Buckets );
3:
4: TimeRuler Ruler;
5: for ( uint32 i = 0; i <1000000;i++)
6: {
7: MyHash[i] = i;
8: }
9:
10: printf("%d\n", Ruler.GetCostTime() );
这里的TimeRuler是使用boost timer的时间戳封装
Release下测试结果:
OS \ Buckets |
8 ( default ) |
1000 |
Win7 |
430ms |
560ms |
Mint( VMware ) |
127ms |
127ms |
Windows的测试结果说明, 不给出桶初始化函数是正确的, 默认管理比自己设置更高效.
Linux平台感觉很诡异, 不清楚是不是虚拟机造成的结果不准确