Ami*_*nos 2 c++ mfc unordered-map hashmap
不MFC CMap
相比有不错的表现std::unordered_map
还是std::map
,我问这个问题,因为我打算在我公司启动一个项目,并加快我要开始发展与现有的"类似"的项目,但在最后,有MFC CMap
(哈希表映射)ans我认为使用std::unordered_map
可以增加性能.我没有找到任何与CMap
互联网相关的基准或好文章.否则,std::unordered_map
我是否必须修改哈希表的大小,CMap
以避免冲突和性能问题?
我做了非常简单的性能对比测试:
int nElements = 1000000;
CMap<int, int, CString, LPCTSTR> MfcHashTable;
MfcHashTable.InitHashTable(nElements);
// CMap insert
DWORD dwStart = ::GetTickCount();
for(int i=0; i<nElements; i++)
{
CString sBase;
sBase.AppendFormat(_T("Test String %d"), i);
MfcHashTable[i] = sBase;
}
DWORD dwMfcMapInsert = ::GetTickCount() - dwStart;
// CMap lookup
CString sValue;
dwStart = ::GetTickCount();
for(int i=0; i<nElements; i++)
{
MfcHashTable.Lookup(i, sValue);
}
DWORD dwMfcMapLookup = ::GetTickCount() - dwStart;
// std::map insert
std::map<int, CString> StdMap;
dwStart = ::GetTickCount();
for(int i=0; i<nElements; i++)
{
CString sBase;
sBase.AppendFormat(_T("Test String %d"), i);
StdMap[i] = sBase;
}
DWORD dwStdMapInsert = ::GetTickCount() - dwStart;
//std::map lookup
dwStart = ::GetTickCount();
std::map<int, CString>::iterator it;
for(int i=0; i<nElements; i++)
{
it = StdMap.find(i);
CString sBase = it->second;
}
DWORD dwStdMapLookup = ::GetTickCount() - dwStart;
// std::unordered_map insert (hash table)
std::unordered_map<int, CString> StdUnordMap;
dwStart = ::GetTickCount();
for(int i=0; i<nElements; i++)
{
CString sBase;
sBase.AppendFormat(_T("Test String %d"), i);
StdUnordMap[i] = sBase;
}
DWORD dwStdUnordMapInsert = ::GetTickCount() - dwStart;
//std::map lookup
dwStart = ::GetTickCount();
std::unordered_map<int, CString>::iterator it1;
for(int i=0; i<nElements; i++)
{
it1 = StdUnordMap.find(i);
CString sBase = it1->second;
}
DWORD dwStdUnordMapLookup = ::GetTickCount() - dwStart;
cout << dwMfcMapInsert << endl;
cout << dwMfcMapLookup << endl;
cout << dwStdMapInsert << endl;
cout << dwStdMapLookup << endl;
cout << dwStdUnordMapInsert << endl;
cout << dwStdUnordMapLookup << endl;
Run Code Online (Sandbox Code Playgroud)
以下是英特尔酷睿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
Run Code Online (Sandbox Code Playgroud)
令人惊讶的CMap
是,这里是胜利者.事实证明,丑陋的遗产CMap
毕竟不是那么糟糕!
归档时间: |
|
查看次数: |
2519 次 |
最近记录: |