static unsigned hashStr(const RWCString& str)

时间:2012-07-17 07:21:49

标签: c++ string hash

我正在浏览我的应用程序核心代码,我发现了这个功能:

//======================================================
// Hash functions needed for the different Dictionaries
//------------------------------------------------------

static unsigned hashStr (const RWCString& str)
{
    return (str.hash () );
}
当我用谷歌搜索它时,我发现了以下内容:

unsigned
hash(caseCompare = RWCString::exact) const;

返回合适的哈希值。如果caseCompare是RWCString :: ignoreCase,那么此函数将与MBCS字符串不兼容。

但我很难理解这一点!

可以请任何人帮助我理解这背后的概念吗? 可能是一个例子会有所帮助。

1 个答案:

答案 0 :(得分:0)

我希望你知道哈希函数是什么。否则就有wiki

(一般来说,散列函数是一个函数,来自(大)数据域(通常说是任意长度的字节序列)返回一个较小域的元素(比如32..256的序列)位)(32位,你有一个unsigned

引用维基:

  

散列函数是将可变长度的大数据集(称为密钥)映射到固定长度的较小数据集的任何算法或子例程。例如,具有可变长度的人名可以被散列为单个整数。哈希函数返回的值称为哈希值,哈希码,哈希值,校验和或简单哈希值。

MBCS是用于编码中文,日文的旧编码...假设它是UTF8的祖先,它以类似的方式工作(某些字符编码为1个字节,某些字符编入2个字节,依此类推。

关于MBCS的评论是因为可能RWCString没有多字节字符串的校对表(告诉它如何使字符变为大写的表,以及进行其他操作,如排序......)。

使用RWCString::ignoreCase调用哈希函数时可能会执行:

return mystring.toUpper().hash(RWCString::exact)

所以它将字符串转换为大写并计算哈希值。如果没有排序规则表,则无法执行toUpper()部分。