不MFC CMap
相比有不错的表现std::unordered_map
还是std::map
,我问这个问题,因为我打算在我公司启动一个项目,并加快我要开始发展与现有的"类似"的项目,但在最后,有MFC CMap
(哈希表映射)ans我认为使用std::unordered_map
可以增加性能.我没有找到任何与CMap
互联网相关的基准或好文章.否则,std::unordered_map
我是否必须修改哈希表的大小,CMap
以避免冲突和性能问题?
我做了非常简单的性能对比测试:
int nElements = 1000000; CMapMfcHashTable; MfcHashTable.InitHashTable(nElements); // CMap insert DWORD dwStart = ::GetTickCount(); for(int i=0; i StdMap; dwStart = ::GetTickCount(); for(int i=0; i ::iterator it; for(int i=0; i second; } DWORD dwStdMapLookup = ::GetTickCount() - dwStart; // std::unordered_map insert (hash table) std::unordered_map StdUnordMap; dwStart = ::GetTickCount(); for(int i=0; i ::iterator it1; for(int i=0; i second; } DWORD dwStdUnordMapLookup = ::GetTickCount() - dwStart; cout << dwMfcMapInsert << endl; cout << dwMfcMapLookup << endl; cout << dwStdMapInsert << endl; cout << dwStdMapLookup << endl; cout << dwStdUnordMapInsert << endl; cout << dwStdUnordMapLookup << endl;
以下是英特尔酷睿i5 2.5Ghz 8GB内存(联想ThinkPad X230)上1000000个元素的结果:
MFC CMap insert: 1125 MFC CMap lookup: 125 std::map insert: 1406 std::map lookup: 172 std::unordered_map insert: 1578 std::unordered_map lookup: 140
令人惊讶的CMap
是,这里是胜利者.事实证明,丑陋的遗产CMap
毕竟不是那么糟糕!