http://hedgezzz.pixnet.net/blog/post/27667546
這裡使用的 hash table 運用在台股代碼 array , 共有 12957 筆資料 , 看要找某一個代碼的 array index
一億次需花多少時間 ?
#include "stringhash.hpp"
using namespace std ;
int main()
{
FILE* logfp ;
char filename[128],s[50] ;
sprintf(filename,"quote.unl") ;
logfp = fopen(filename,"r") ;
StringHashTable hashtable(8192) ;
int iIdx = 0 ;
while( fgets(s,50,logfp) != NULL)
{
char stkid[50] ;
sscanf(s,"%[^'|']|",stkid) ;
//printf("(%s)\n",stkid) ;
hashtable[stkid] = iIdx ;
++iIdx ;
}
int icnt = 0 ;
strcpy(s,"62452") ;
for(int idx=0;idx<100000000;idx++)
{
iIdx = hashtable[s] ;
++icnt ;
}
}
共花了三秒鐘 , 所以粗估每秒鐘可完成約 3千3百萬次查詢 !!!!
==========================================
使用 stl 的 unordered_map :
#include <unordered_map>
using namespace std ;
int main()
{
FILE* logfp ;
char filename[128],s[50] ;
sprintf(filename,"quote.unl") ;
logfp = fopen(filename,"r") ;
unordered_map<string,int> hashtable ;
int iIdx = 0 ;
while( fgets(s,50,logfp) != NULL)
{
char stkid[50] ;
sscanf(s,"%[^'|']|",stkid) ;
//printf("(%s)\n",stkid) ;
hashtable[stkid] = iIdx ;
++iIdx ;
}
int icnt = 0 ;
strcpy(s,"62452") ;
for(int idx=0;idx<100000000;idx++)
{
iIdx = hashtable[s] ;
++icnt ;
}
}
計花了 11 secs , 每秒鐘不到 1 千萬次 !!!
留言列表