stdext::hash_map使用字符串key

stdext::hash_map使用字符串key
stdext::hash_map使用字符串(const char*)做key的话,不是只指定一个compare函数难么简单,要给定一个结构体,其包括hash函数,compare函数,以及“桶设定”

struct StringCompare 
{
// define hash function for strings 
     enum 
    { 
         // parameters for hash table 
        bucket_size = 4,   //  一个桶4byte长度(因为sizeof(char*)=4)
        min_buckets = 8  //  最少存在8个桶
    };
    size_t  operator()( const  char* str)  const 
    { 
        unsigned  int seed = 131;  //  31 131 1313 13131 131313 etc..
unsigned  int hash = 0;
while (*str)
{
hash = hash * seed + (*str++);
}
return (hash & 0x7FFFFFFF);
    }
     bool  operator()( const  char *s1,  const  char* s2)  const 
    {    
         if (strcmp(s1, s2) == 0)
        {
             return  false;
        }
         else
        {
             return  true;
        }
    } 
}; 

然后

stdext::hash_map<const char*, Your Data Type, StringCompare>

你可能感兴趣的:(stdext::hash_map使用字符串key)