首页 > 代码库 > CMap与hash_map效率对比
CMap与hash_map效率对比
CMap与hash_map底层均采用hash stable实现,CMap是MFC提供的模板类。hash_map虽然目前并未纳入C++标准模板类库,但几乎每个版本的STL都提供了相应的实现。CMap与hash_map的存储于查询效率比较如下:
利用rand函数随机生成99999个整数构成查询数据集,紧接着申请9999个整数作为查询。测试两个模板类的插入与查询总时间,测试结果显示:当查询都不存在时CMap时间大约16ms,hash_map为0ms;当大部分查询存在时CMap时间为624,而hash_map平均为5ms。因为所有的测试都是随机产生的,因此以上的时间均为平均时间。
参考代码:
#include "stdafx.h" #include "afxtempl.h" #include <hash_map> #include <time.h> #include <iostream> using namespace std; #define DATASET 99999 #define QUERYNUM 9999 int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned int)time(NULL)); CMap<int, int, int, int> cmap; hash_map<int, int> hmap; int tempnum[DATASET]; int query[QUERYNUM]; int exsit = 0; int j = 0; for (int i=0; i<DATASET; ++i) { // tempnum[i] = rand()%1000; tempnum[i] = rand(); } for (int i=0; i<QUERYNUM; ++i) { // query[i] = rand() + 1001; query[i] = rand(); } DWORD start; start = GetTickCount(); for (int i=0; i<DATASET; ++i) { cmap[tempnum[i]] = 1; } for (int i=0; i<QUERYNUM; ++i) { if (cmap.Lookup(query[i], j)) { exsit++; } } cmap.RemoveAll(); cout<<"Query Time"<<(double)(GetTickCount() - start)<<" :"<<exsit<<endl; exsit = 0; start = GetTickCount(); for (int i=0; i<DATASET; ++i) { hmap[tempnum[i]] = 1; } for (int i=0; i<QUERYNUM; ++i) { if (hmap.find(query[i]) != hmap.end()) { exsit++; } } hmap.clear(); cout<<"Query Time"<<(double)(GetTickCount() - start)<<" :"<<exsit<<endl; system("pause"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。