問題タブ [stdhash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
513 参照

c++ - このコードが std::hash テンプレートの **ALL** 列挙型の特殊化を提供するのはなぜですか?

私は C++ のプロではありませんが、MSVS 2015 C++ コードを MinGW 4.9.2 に移植して、std::hashすべての をサポートするようにクラスを特殊化する際に、何らかの方法で解決策を提供しましたenum。ここに C++ コンパイラの開発者または C++ プロ プログラマーがいる場合、C++ 標準によると未定義の動作であるにもかかわらず、この特殊化が機能する理由を説明できますか?

Gist のサンプルを含む完全なコードへのリンク

のサポートを提供するstd::hash<enum T>ということは、すべてのクラスstd::unordered_XXXがキーとして any をサポートすることを意味しenumます。

この定義のGCC 6.1.0std::hashエラーで失敗します

この定義のないGCC 5.3.0std::hashは、std::unordered_set で失敗し、次のエラーが発生します。

0 投票する
1 に答える
1413 参照

c++ - QVariant をハッシュするには?

QList<QVariant>のキーとして使用する必要がありますstd::unordered_map。これの目的は、一意のキー列にインデックスを作成することにより、データ テーブルの検索を最適化することです。

だから私はこのコードを作りました。完全ではありませんが、テーブル キー列で発生するいくつかの基本的なデータ型を示します。

明らかに、私はすべてが好きではありませんswitch。これは非常に長く醜いコードであり、基本的な型しか説明していません。QVariantの内部データに割り当てられたメモリ データのハッシュを作成したいと思います。または、さらに良い - Qt のハッシュ方法を使用します。

QVariant をプリミティブ型に変換せずにハッシュする半信頼できる*方法はありますか?

*複雑なオブジェクトが QVariant の背後に隠れている可能性があることは理解していますが、これが衝突につながるケースは非常にまれであるため、気にする必要はありません。

0 投票する
3 に答える
5371 参照

c++ - std::unordered_map のキーとして QString を使用する

QStringのキーとして使用しようとしていますstd::unordered_mapが、エラーが発生します:

エラー C2280: 'std::hash<_Kty>::hash(const std::hash<_Kty> &)': 削除された関数を参照しようとしています

QHashマップの値の型がコピーできないため、切り替えることができません 。これを機能させる方法はありますか?

0 投票する
1 に答える
1058 参照

c++ - 固定サイズのハッシュを生成する

cpp ユーティリティで std::hash を使用して、文字列のハッシュを生成しています。私の要件は、11 桁の固定サイズのハッシュを生成することです。衝突が起こらないようにするために、ハッシュ関数は優れている必要はありません。私が持っている唯一の要件は、11 桁の固定サイズのハッシュを生成することです。どのような入力でも構いません。カスタム ハッシュ関数を使用することもできます。

0 投票する
1 に答える
1269 参照

c++ - std::hash は、異なるコンパイル済みビルドと異なるマシンの同じ入力に対して同じ結果をもたらしますか?

同じパラメーターで実行したかどうかを検出するためにハッシュを計算する必要があるランダムなテストパラメーターがいくつかあります。別の時点で再コンパイルされた同じソースを使用してテストを実行するか、別のマシンで実行する場合があります。

それでも、同じパラメーターが実行に使用されたかどうかを検出したいと考えています。std::hash異なるコンパイル済みビルドと異なるマシンで同じ入力に対して同じ結果が得られますか?

例えば

これは常に一意の番号になりますか?

0 投票する
1 に答える
419 参照

c++ - C++ std::hash の戻り値の型

std::hashそのため、 の使用とその標準実装に関する多くの記事、ドキュメント ページ、投稿、ベンチマークなどを読んできました。

あらすじ

hereを見ると、std::hashは常に を返すように見えます。これは、実装に依存しますが、ここstd::size_tから続くサイズは少なくとも16 ビットまたは 2 バイトです。

しかし、これは私に関係があります。std::hashハッシュが少なくとも32ビットになるという保証さえできない場合(そして、64ビットを返すことを本当に望んでいます)、文字列でどのように使用できますか。

私の特定の x64 マシンstd::size_tでは が として定義されてlong unsigned intいますが、プログラムを展開するときにこれが保証されていないようです。

質問

これを回避する方法はありstd::hashますか?

結論

コメントから判断すると、std::hash適切ではありません。ありがとう!