問題タブ [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.
c++ - g++ リンカー エラー: std::hash の未定義参照エラーの取得
コードで TR1 実装の unordered_map を使用していますが、リンカが解読できない奇妙なエラーを返します。
これはエラーであり、それが向けられている行を検出することさえできませんか? 声明から:
`std::hash::operator()(DottedRule) const' への未定義の参照
ハッシュの使用法についてだと思います。さて、コード全体が大きすぎます (それでも見たい場合は、後で投稿するかもしれません) が、関連する部分は次のとおりです。
私が含めた最後の行は、ハッシュが使用されている唯一の場所です。何が起こっているのでしょうか?
どうもありがとう、オヌール
c++11 - C++0xのstd::weak_ptrにstd::hashが定義されていないのはなぜですか?
std ::weak_ptrのoperator<に関する説明を読んだ後、std::weak_ptrの制御ブロックを使用するようにstd::hashを定義しても機能しない理由がわかりません。また、これが標準化委員会によって無視されたとは信じられません。誰かがそのトピックに関連する議論を読んだことがありますか?
編集:演算子に関するディスカッション<std :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html
c++ - std::hash との予期しない衝突
無限の数の文字列を 32b int にハッシュすると衝突が発生する必要があることはわかっていますが、ハッシュ関数には適切な分布が期待されます。
これら 2 つの文字列が同じハッシュを持つのは奇妙ではありませんか?
やその他を使用できることはわかってboost::hash<std::string>
いますが、 の何が問題なのか知りたいですstd::hash
。私はそれを間違って使用していますか?どういうわけかそれを「シード」するべきではありませんか?
c++ - テンプレートクラスのネストされたクラスのstd::hashの特殊化
Baz
ネストされたクラスを含むテンプレートクラスがありますSub
。std :: hashを特殊化して、このサブクラスのハッシュ関数を定義したいと思います。ただし、機能していないようです。
Gcc 4.5.3は文句を言います:
アップデート
私が実際にやろうとしているのは、その中の要素への安定した参照(C ++の意味ではない)をサポートするコンテナーを実装することです。ユーザーがこれらの参照をstd::unordered_set
類似のものに挿入し、それらを使用して既存の要素に効率的にアクセスまたは変更できるようにしたいと思います。以下は単なるモックアップであり、私が実装している正確なコンテナではありません。問題は、参照タイプのハッシュ関数を定義することです。
c++ - std::hash は stdlib ディストリビューション全体で同じであることが保証されていますか?
私がstd::hash
使用してlibstdc++
から、次のC++11
VS 2012ライブラリで使用した場合、それらは一致しますか?
ハッシュの実装は C++ 仕様の一部ではなく、ディストリビューションによって異なる可能性があると思いますか?
c++ - std::hash および/または boost::hash の目的は何ですか?
参照の実装を指定せずに、また参照のアルゴリズム (md5、sha256 など) を指定せずにハッシュ関数を提供するのはなぜですか?
また、C++ 標準準拠 などのデータ構造にも同様の機能がありますstd::unordered_map/set/multimap/multiset::hash_function
。
だから私が得られないのは:
- そのような文書化されていないメソッドを提供する理由
- 実装の詳細は、ハッシュ関数を正しく使用するための基本です。プログラマーの観点から、これらの関数の目的は何ですか?
- この関数は、特定のアルゴリズムにリンクできますか?
c++ - std::hashを他のライブラリのタイプに特化する方法
したがって、私が使用するライブラリには列挙型があります(名前はLibEnum
)。のが必要ですstd::unordered_set
がLibEnum
、専用ではないというコンパイルエラーが発生しますstd::hash
。簡単に記述して値の数(最初の要素は0、2番目の要素は1など)を返すことができますが、この特殊化を正確にどこに置くべきで、どのように見えるべきですか?ライブラリソースを変更できません。
c++ - boost::hash_value を使用して C++11 で std::hash を定義する
C++11 & Boost で次のことを行う簡単な方法はありますか?
std::hash
から入手可能な場合は常にの標準定義を使用する<functional>
- が欠落しているがで利用可能な場合
boost::hash_value
に定義するために使用します。std::hash
std::hash
boost::hash_value
<boost/functional/hash.hpp>
例えば:
std::hash<std::vector<bool>>
標準ライブラリから取得する必要があります。std::hash<std::vector<unsigned>>
で実装する必要がありますboost::hash_value
。
c++ - std :: hashは、「等しい」浮動小数点数に対して等しいハッシュを保証しますか?
std::hash
(たとえば、double
sまたはsの)浮動小数点の特殊化は、ほぼ等式float
に関して信頼できますか?つまり、2つの値(となど)が等しいと比較する必要があるが、演算子ではそうしない場合、どのように動作しますか?(1./std::sqrt(5.)/std::sqrt(5.))
.2
==
std::hash
それで、私は期待どおりに機能するための鍵double
としてに頼ることができますか?std::unordered_map
「浮動小数点値のハッシュ」を見たことがありますが、それはブーストについて尋ねます。C++11の保証について質問しています。
c++ - std::tuples の std::hash... 改善点はありますか?
std::hash がタプルをサポートしていないことに気付いた人もいるかもしれません。そのため、これまでに見たソリューションよりも「いい」と思われるオーバーロードを追加しました。このコードをさらに削減するアイデアはありますか? これはコンパイラキラーであることに注意してください! それをコンパイルできたのは「Clang 3.2」だけでした... Intel Compiler 13.1 は特殊化を取得せず、「C++ 標準はハッシュ blabla をサポートしていません」と伝え続けます。そして、元の Microsoft コンパイラについて話す必要はありません。
ところで、私のソリューションは次のような再帰タプルをサポートしているstd::tuple<std::tuple<int,int>,int>
ため、これが今日見た既存のソリューションにも当てはまるかどうかはわかりません。