0

アプリケーションのコアコードを調べていたところ、次の関数が見つかりました。

//======================================================
// 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 文字列と互換性がありません。

しかし、私はこれをほとんど理解できませんでした!

この背後にある概念を理解するのを手伝ってくれる人はいますか? 参考になるかもしれません。

4

1 に答える 1

0

ハッシュ関数とは何かを知っていただければ幸いです。それ以外の場合は、そのためのwikiがあります。

(一般に、ハッシュ関数は、データの(大きな)ドメイン(通常、任意の長さのバイトのシーケンスとしましょう)から、より小さなドメインの要素(32..256ビットのシーケンスとしましょう)を返す関数です)( 32 ビットの場合、unsigned)

ウィキから引用するには:

ハッシュ関数は、キーと呼ばれる可変長の大きなデータ セットを、固定長の小さなデータ セットにマップする任意のアルゴリズムまたはサブルーチンです。たとえば、可変長の人の名前は、単一の整数にハッシュできます。ハッシュ関数によって返される値は、ハッシュ値、ハッシュ コード、ハッシュ サム、チェックサム、または単にハッシュと呼ばれます。

MBCSUTF8は、中国語、日本語を体系化するために使用される古いコーディングです... の祖先であり、同様の方法で機能するとしましょう(一部の文字は 1 バイトで体系化され、一部は 2 バイトで体系化されます。

MBCS に関するコメントは、マルチバイト文字列の照合テーブル (文字を大文字にする方法や、並べ替えなどの他の操作を実行する方法を示すテーブルなど) がおそらくRWCStringないためです。

おそらくハッシュ関数は、 with で呼び出されたときに次のようになりRWCString::ignoreCaseます。

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

そのため、文字列を大文字に変換してハッシュを計算します。照合テーブルがなければ、その役割を果たせませんtoUpper()

于 2012-07-17T07:46:06.363 に答える