問題タブ [unordered-map]
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++ - C++: ユーザー定義のハッシュ/等価性を使用した unordered_map の作成のヘルプ
組み込みの整数型の行列行に対して、ユーザー定義のハッシュ関数と等価述語を使用して std::unordered_map を作成しようとしています。可変範囲で機能するには、ハッシュ ファンクターと等価ファンクターが必要なので、std::bind を使用します。次のコードをコンパイルして意図したとおりに動作させるにはどうすればよいですか? 私の間違いは、std::bind を使用して std::unordered_map をインスタンス化するリストの一番下にあると推測しています。
いくつかの説明:
行列の行に格納されている整数の個々のビットを気にするので、boost::hash_combine を使用できません。そのため、独自のイテレータを作成しない限り、boost::hash_combine は整数全体を結合し、誤った結果につながります。また、1 から 200,000 までの範囲で機能するハッシュ ファンクターと等値ファンクターが必要なので、テンプレート パラメーターで範囲を指定することは妥当なオプションではありません。
エラー:
これが(私が思うに)コンパイルを試みたときに生成されたエラーの最も重要な部分です:
/usr/include/c++/4.6/bits/stl_pair.h:92:11: エラー: 'std::pair<_T1, _T2>::first' の型が不完全です /usr/include/boost/numeric/ublas/fwd .hpp:73:11: エラー: 'const struct boost::numeric::ublas::matrix_row、boost::numeric::ublas::unbounded_array > > >' の宣言です</p>
全体を見たい場合は、ここにすべてをダンプしました。
code>c++ - tr1にオブジェクトを挿入できますかunordered_map
C ++で処理するデータが大量にあり、unordered_mapが効率的に機能することがわかりました。ただし、オブジェクトをunordered_mapに格納する例はありません。私が自分で試したとき、それは従わなかった。
最初にunordered_mapを含めます
次に、タイプを定義します
ここのVector3fは私が作成したクラスです。上記に準拠しても、エラーは返されません。ただし、追加すると
complierはエラーの大きな段落を返します。ペアを挿入するときに何か問題があるか、ソートされていない場合はオブジェクトの挿入をサポートしていません。そうでない場合は、ハッシュマップのようなオブジェクトペアを保存および検索する他の効率的な方法があります。 JAVA。以下は、コンパイラのエラーメッセージレポートです。
これはVector3fクラスです
c++ - unordered_map のキーで std::tr1::function オブジェクトを使用するにはどうすればよいですか?
キーの型が std::tr1::function を使用しているコールバック関数を含む構造体である std::tr1::unordered_map を形成しようとしています。私は 2 つの問題に直面しています。2)関数オブジェクトから通常の関数ポインタ(またはハッシュに使用できるもの)を取得できないため、ハッシュ関数を実装する方法がわかりません。
コード例は次のとおりです。
最初のエラーの詳細は次のとおりです。
2 番目のエラーについては、明らかに function<...>::get メンバーはありませんが、代わりに何を使用すればよいでしょうか?
Boost バージョン 1.42 と g++ 4.2.2 を使用しています。助けてくれてありがとう。
アップデート
投稿された質問に対する答えは「できません」です。tr1::function オブジェクトは (boost::hash などを使用して) ハッシュ可能ですが、等値比較はできません。ハッシュ キーで関数を使用する場合は、アプローチを再考するか、回避策を見つけてください。
c++ - std::mapをstd::unordered_mapに置き換えられないのはなぜですか
私は家にコードを持っていないので、この質問は少し大雑把かもしれませんが、そうでなければ週末を通して私を悩ませることになるでしょう。
一部のコードをC++11に更新しようとすると、一部std::map
を。に置き換え始めましたstd::unordered_map
。コードstd::map::find()
はマップ内の特定の要素にアクセスするためにのみ使用されていたため、置換は簡単であるはずだと思いました。返されたイテレータはauto
-typed変数(auto res = map.find( x )
。さらに調査する時間。res->second.do_stuff()
struct std::pair<char, B> does not have a member second
たぶんこれで十分な情報なので、誰かがこの奇妙なコンパイラエラーについてのヒントを教えてくれます。それとも、注文が必要な部分を除いて同じインターフェイスを使用する必要があることstd::map
を理解していますか?正しくありませんか?std::unordered_map
編集:
ここで約束したように、問題に関するもう少しの分析。おそらくこれは誰かが今私をより良く助けることを可能にするでしょう。コメントのヒントから推測したように、これは実際にはマップ内の要素にアクセスしたポイントではなく、コードの他の部分が原因でした。私が見つけた理由は、クラスX内のマップを使用して、クラスXの他の要素(一種のツリー構造)へのポインターを格納したためです。ただし、これはでは機能するようですが、では機能しstd::map
ませんstd::unordered_map
。問題を示す非常に単純なコードを次に示します。
std::map
動作std::unordered_map
しません。これが事実である理由、またはそれを動作させるために何ができるかについてのアイデアはありstd::unordered_map
ますか?
c++ - unordered_mapからキーと値のリストを取得する
vector
キーと値のリストを(として)取得する最も効率的な方法は何unordered_map
ですか?
具体的には、問題のマップがであると仮定しますunordered_map<string, double>
。vector<string>
次に、キーを。として、値を。として取得したいと思いますvector<double>
。
マップ全体を繰り返して結果を収集することはできますが、より効率的な方法はありますか?それに切り替えるかもしれないので、通常のマップでも機能するメソッドがあると便利です。
c++ - C ++:unordered_map、イテレータは比較できません
とによって返されunordered_map
たイテレータを比較できません。状況は次のとおりです。find()
end()
どこIpAddressPort
にあるのかstruct
、IpAddressPortKey
こんな感じ
ブロック内の比較if
により、次のエラーが発生します。
これを引き起こす可能性のあるアイデアはありますか?
c++ - unordered_map (A) コンストラクター、(B) 割り当てを削除、(C) から継承
私の宣言はunordered_map<Comparison,int> Chs
whenComparison
がクラス名でした。いくつか質問があります。
A. コンストラクターが呼び出されたときに、いくつかの要素を挿入するにはどうすればよいですか ( のようにvector
) ?
例:
このコードはコンパイルエラーになります。
new
B.この宣言で(で) 割り当てられたメモリを解放する方法は?
C. 継承クラス:
RC
A questionのような要素で初期化できるように、コンストラクターをどのように記述すればよいですか?
ありがとう、そして私の下手な英語でごめんなさい。
c++ - C++ 外部 boost::unordered_map トラブル マルチスレッド
私は boost::unordered_map をグローバル変数として使用しようとしています.2つのスレッド (相対ミューテックスを使用) が動作します。整数を使用した単純なバージョンは機能しますが、boost::unordered_map バージョンは機能しません。
global.hpp: extern boost::unordered_map my_namespace::_cache;
概して:
スレッド 1 で
スレッド 2 で
最初の呼び出しの後に予想される値は 3 である必要があり、代わりに -1 です。初期化/割り当ての問題だと思います
前もって感謝します。
c++ - フライ級をサポートするためにブーストunordered_mapを作成する方法
私は次のことをしようとしています:
しかし、コンパイラは次のように文句を言います。「エラーC2665:'boost :: hash_value':17個のオーバーロードのいずれもすべての引数タイプを変換できませんでした」。
しかし、私は次の関数を定義しました:
しかし、それはコンパイルされません。
フライウェイトをサポートするためにブーストunordered_mapを作成するには何をする必要がありますか?
[編集]次のコードで動作するようになりました:
そしてそれをテンプレートパラメータとしてマップの構築に渡しました。
この場合、hash_valueのオーバーロードが機能しなかった方法がわかりません。
c++ - unordered_mapがsigsegvを引き起こす方法
編集:解決しました、私は方法を知っていますが、理由がわかりません。
variables
宣言をから変更しました
に
そしてそれはうまくいきます。
理由がわかっている場合は、回答に記入してください。
私は非常に大きなプログラムを持っているので、ここにどのコードを持ってくるべきかわかりません。
派生クラスを継承する抽象クラスがあります。アブストラクトはunordered_map<int,int>
プライベートメンバーとして(テンプレート)、パブリックメソッドを持っていinsert(int,int)
ます。
派生クラスは、基本クラスinsert
メソッドを使用して、要素をunordered_map<int,int>
コンテナに挿入します。
最初int
はcounterのように使用し、0から開始します。最初の11個の挿入要素はOKですが、12番目の要素でsigsegvを取得しstruct equal_to
、stl_function.h(209)でエラーが発生します。
デバッガーで、unordered_mapのbucket_countが11に等しいことを確認しました。おそらく、何かの手がかりになります。
私のコンパイラはgcc4.6.1です。
たぶん、あなたは一般的に何がsigsegvを引き起こす可能unordered_map.insert
性があるかを書くことができますか?
ありがとう、そして私の貧弱な英語について申し訳ありません。
どちらかがわかっている場合は、特定のコードを持ってきます。
編集:これはinsert
方法です:
宣言は次のとおりです。
sigsegvはarrayPlace
==11のときに発生し、何がvalue
等しいかは関係ありません。