求HASH算法
key基本上是C++的常用关键字(不是全部),一共65个。比如:“if else break while for ”......
hash表总容量为65×120%=70多个,取素数。我构建了n多的hash算法,发现对这些关键词进行分布时,不够散列。总有很多冲突,哪一位大侠有比较好的HASH算法,专门针对C++关键词的。
关键词如下:
hash?关键词?map
s_mapKeywords[ _T("if") ] = HXTOKENTYPE_KEYWORD_IF;
s_mapKeywords[ _T("else") ] = HXTOKENTYPE_KEYWORD_ELSE;
s_mapKeywords[ _T("for") ] = HXTOKENTYPE_KEYWORD_FOR;
s_mapKeywords[ _T("while") ] = HXTOKENTYPE_KEYWORD_WHILE;
s_mapKeywords[ _T("break") ] = HXTOKENTYPE_KEYWORD_BREAK;
s_mapKeywords[ _T("return") ] = HXTOKENTYPE_KEYWORD_RETURN;
s_mapKeywords[ _T("continue") ] = HXTOKENTYPE_KEYWORD_CONTINUE;
s_mapKeywords[ _T("switch") ] = HXTOKENTYPE_KEYWORD_SWITCH;
s_mapKeywords[ _T("case") ] = HXTOKENTYPE_KEYWORD_CASE;
s_mapKeywords[ _T("do") ] = HXTOKENTYPE_KEYWORD_DO;
s_mapKeywords[ _T("goto") ] = HXTOKENTYPE_KEYWORD_GOTO;
s_mapKeywords[ _T("typedef") ] = HXTOKENTYPE_KEYWORD_TYPEDEF;
s_mapKeywords[ _T("new") ] = HXTOKENTYPE_KEYWORD_NEW;
s_mapKeywords[ _T("delete") ] = HXTOKENTYPE_KEYWORD_DELETE;
s_mapKeywords[ _T("friend") ] = HXTOKENTYPE_KEYWORD_FRIEND;
s_mapKeywords[ _T("public") ] = HXTOKENTYPE_KEYWORD_PUBLIC;
s_mapKeywords[ _T("protected") ] = HXTOKENTYPE_KEYWORD_PROTECTED;
s_mapKeywords[ _T("private") ] = HXTOKENTYPE_KEYWORD_PRIVATE;
s_mapKeywords[ _T("default") ] = HXTOKENTYPE_KEYWORD_DEFAULT;
s_mapKeywords[ _T("virtual") ] = HXTOKENTYPE_KEYWORD_VRITUAL;
s_mapKeywords[ _T("operator") ] = HXTOKENTYPE_KEYWORD_OPERATOR;
s_mapKeywords[ _T("try") ] = HXTOKENTYPE_KEYWORD_TRY;
s_mapKeywords[ _T("catch") ] = HXTOKENTYPE_KEYWORD_CATCH;
s_mapKeywords[ _T("finally") ] = HXTOKENTYPE_KEYWORD_FINALLY;
s_mapKeywords[ _T("throw") ] = HXTOKENTYPE_KEYWORD_THROW;
s_mapKeywords[ _T("leave") ] = HXTOKENTYPE_KEYWORD_LEAVE;
s_mapKeywords[ _T("#include") ] = HXTOKENTYPE_KEYWORD_EXP_INCLUDE;
s_mapKeywords[ _T("#define") ] = HXTOKENTYPE_KEYWORD_EXP_DEFINE;
s_mapKeywords[ _T("#ifdef") ] = HXTOKENTYPE_KEYWORD_EXP_IFDEF;
s_mapKeywords[ _T("#ifndef") ] = HXTOKENTYPE_KEYWORD_EXP_IFNDEF;
s_mapKeywords[ _T("#else") ] = HXTOKENTYPE_KEYWORD_EXP_ELSE;
s_mapKeywords[ _T("#endif") ] = HXTOKENTYPE_KEYWORD_EXP_ENDIF;
s_mapKeywords[ _T("#undef") ] = HXTOKENTYPE_KEYWORD_EXP_UNDEF;
s_mapKeywords[ _T("int") ] = HXTOKENTYPE_DECLARE_INT;
s_mapKeywords[ _T("float") ] = HXTOKENTYPE_DECLARE_FLOAT;
s_mapKeywords[ _T("double") ] = HXTOKENTYPE_DECLARE_DOUBLE;
s_mapKeywords[ _T("char") ] = HXTOKENTYPE_DECLARE_CHAR;
s_mapKeywords[ _T("BYTE") ] = HXTOKENTYPE_DECLARE_BYTE;
s_mapKeywords[ _T("WORD") ] = HXTOKENTYPE_DECLARE_WORD;
s_mapKeywords[ _T("DWORD") ] = HXTOKENTYPE_DECLARE_DWORD;
s_mapKeywords[ _T("long") ] = HXTOKENTYPE_DECLARE_LONG;
s_mapKeywords[ _T("unsigned") ] = HXTOKENTYPE_DECLARE_UNSIGNED;
s_mapKeywords[ _T("const") ] = HXTOKENTYPE_DECLARE_CONST;
s_mapKeywords[ _T("struct") ] = HXTOKENTYPE_DECLARE_STRUCT;
s_mapKeywords[ _T("union") ] = HXTOKENTYPE_DECLARE_UNION;
s_mapKeywords[ _T("enum") ] = HXTOKENTYPE_DECLARE_ENUM;
s_mapKeywords[ _T("class") ] = HXTOKENTYPE_DECLARE_CLASS;
s_mapKeywords[ _T("short") ] = HXTOKENTYPE_DECLARE_SHORT;
s_mapKeywords[ _T("void") ] = HXTOKENTYPE_DECLARE_VOID;
s_mapKeywords[ _T("static") ] = HXTOKENTYPE_DECLARE_STATIC;
s_mapKeywords[ _T("sizeof") ] = HXTOKENTYPE_CONST_SIZEOF;
s_mapKeywords[ _T("TRUE") ] = HXTOKENTYPE_CONST_CONST_TRUE;
s_mapKeywords[ _T("FALSE") ] = HXTOKENTYPE_CONST_CONST_FALSE;
s_mapKeywords[ _T("true") ] = HXTOKENTYPE_CONST_CONST_TRUE;
s_mapKeywords[ _T("false") ] = HXTOKENTYPE_CONST_CONST_FALSE;
s_mapKeywords[ _T("NULL") ] = HXTOKENTYPE_CONST_CONST_NULL;
s_mapKeywords[ _T("this") ] = HXTOKENTYPE_CONST_CONST_THIS;