問題タブ [multimap]

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 に答える
701 参照

c++ - C++ でマルチマップ クラスを使用してデータベース クラスを作成する

プロジェクトで C++ を使用しています。ペア (文字列、整数) を格納し、文字列に基づいてアクセスする必要があります。multimap クラスはそのために最適なようです。特定の文字列に関連付けられたすべての整数の平均とカウントを見つけるメソッドを含む独自のクラス、データベースを作成しようとしています。ただし、初期コンストラクターについては少し混乱しています。database data();が呼び出されたときにデータベースを作成する必要がありますが、大きなエラーが発生します。

これは、database.cpp のコンストラクターの実装です。

また、database.h ファイルはそのように見えます。

エラーはかなり密集しており、解読できませんが、g++ database.cpp test.cpp を実行すると、これが出てきます。

編集:

追加するのを忘れていました、助けてくれてありがとう!

さびた

0 投票する
7 に答える
19600 参照

c++ - マルチマップでキーと値のペアの重複が許可されるのはなぜですか?

編集: multimap に重複 キーを含めることができない理由を尋ねているわけではないことに注意してください

重複するキーと値のペアを許可する multimap の背後にある理論的根拠は何ですか? (ないキー)

これは 3 を出力しましたが、これは私を少し驚かせました。

直観的には、 ( とは対照的に) が常にマップを変更するとは限らないC++ のstd::map動作とは一致しません。insertoperator[]

その背後には根拠がありますか、それとも恣意的なものですか?

0 投票する
2 に答える
847 参照

c++ - マルチマップに挿入すると segfault が発生する

自分のクラス内でマルチマップを使用するプロジェクトに取り組んでいますが、segfault に遭遇しました。この問題に関連するコードの一部を次に示します。助けていただければ幸いです。ありがとう。

ここにdatabase.hがあります

ここにdatabase.cppがあります

ここにtest.cppがあります

どうもありがとう。コンパイルして実行しますcout << "test1" << endl;が、次の行で segfaults が発生します。

さびた

0 投票する
2 に答える
132 参照

list - すべてのプッシュバックの後に STL リストを並べ替えるか、単に Multimap を使用しますか?

multimap<int,string> を使用して数十万のアイテム (>300K) を格納していたときに、分析のためにさらにデータを追加する必要があることに気付きました。そのため、stl に必要ないくつかの項目とオーバーライドされた演算子を保持するクラスを作成し、multimap<ourStruct,String> を使用しました。これは問題なく機能し、(いくつかのテスト データを使用して) 以前よりもそれほど時間はかかりませんでした。その後、すべての項目を追加し終わった後に並べ替えさえすれば、 stl <list> が問題なく動作することに気付きました。驚いたことに、すべてのアイテムをマルチマップに追加すると、すべてのアイテムをリストに追加して並べ替える合計時間よりも簡単に勝ることがわかりました。
これは私たち EE タイプには意味がありません。私たちの考えでは、マルチマップへのすべての挿入はリストをトラバースして最後に追加する必要があり、リストと同様に (プッシュバックを介して) 最後に追加するだけです。 、うまくいけば、並べ替えにそれほど時間がかかりません。
もう 1 つの事実: 私たちは最初にリストをソートせずに比較テストを行い、リストを使用して速度が大幅に向上したことに感激しました。次に、並べ替えを追加し、少し唖然としました...
そこにいるCSの専門家の中で、検討したいと思っている人はいますか?

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

java - 異種の継承されたオブジェクトのHibernateマッピングマップ

次のデータベーススキーマがあります。

そして、私は次のオブジェクトモデル(概略)を持っています:

次に、単一の値のマップへのマッピングを作成しました:

そして、私はlistMapのマッピングに固執しました。これをマッピングする際の助けをいただければ幸いです。

0 投票する
2 に答える
1306 参照

c++ - C++ でのマルチマップ

C++ でマルチマップを使用しようとしています。主な目的は、マルチマップ ポインターを格納するマップがあることです。

マルチマップに挿入しようとすると、問題が発生します。誰かが私がどこで間違っているのか教えてもらえますか?

問題は mm_map_pointer->insert( pair(1, 2)); にあります。誰か助けてくれませんか?

0 投票する
2 に答える
936 参照

c++ - ポインターの変化を追跡する

私は正常に動作している赤黒木アルゴリズムを持っています。ノードがツリーに挿入されると、insert() メソッドは、挿入されたノードへのポインターを呼び出し元に返します。そのようなすべてのポインターを STL ベクトルに格納します。

問題は、RB ツリーの操作内で、これらのポインターが無効になる場合があることです。たとえば、ノード A の値を現在のノードにコピーしてからノード A を削除する、rotateleft/right 中に呼び出されるメソッドがあります。そのベクトルにノード A へのポインターがありましたが、これは現在無効です。

次のようにベクター内のポインターを更新する方法を考えました。

1) ノード ポインタをそれらのポインタを保持するベクトル インデックスにマップするマルチマップを保持します。

2) ノードを削除する前に、このマルチマップをチェックして、影響を受けるベクトル内のすべてのスポットを見つけます

3) ベクトルを反復処理し、古いポインターを新しいポインターに変更します。

4) マルチマップのキー値を更新して、新しいポインタも反映させます。

問題は、明らかな理由でマップ コレクションのキー値を更新できないことです。また、これは複雑さと実装の両方の理由から、恐ろしい解決策のようです。このポインターの動的更新をどのように達成できるかについてのアイデアはありますか?

0 投票する
4 に答える
7581 参照

c++ - std :: priority_queueを使用するよりも、優先キューとしてstd :: multisetを使用する方が速いのはなぜですか?

std::multisetをstd::priority_queueに置き換えようとしています。しかし、私はスピードの結果に失望しました。アルゴリズムの実行時間は50%増加します...

対応するコマンドは次のとおりです。

priority_queueの実装の速度に驚いています。異なる結果を期待していました(PQの方が良い)...概念的には、マルチセットが優先キューとして使用されています。優先キューとマルチセットのパフォーマンスが異なるのはなぜ-O2ですか?

10件の結果の平均、MSVS 2010、Win XP、32ビット、メソッドfindAllKNN2()(以下を参照)

これらの結果の原因は何ですか?ソースコードの他の変更は行われていません...あなたの助けに感謝します...

MSの実装:

方法:

PQの実装(遅い、なぜですか?)

方法:

0 投票する
4 に答える
2406 参照

c++ - C++ マルチマップ挿入関数

マルチマップを使用して値を保存しています。マルチマップに挿入するときに、値が成功か失敗かを確認したいだけです。

次のコードを使用しようとしています

しかし、これはスカラー型が期待するエラーを出しています。

ここで何かばかげたことを見逃していると思います。int と bool に型キャストしようとしましたが、うまくいきませんでした。

助言がありますか?

0 投票する
2 に答える
1668 参照

c++ - std::multimapで指定されたキーよりも厳密に小さい最大のキーを返す方法は?

multimapメソッドlower_boundと を提供しますupper_bound。どちらも、必要な値よりも大きなキーを持つ値にイテレータを返すlower_bound可能性があり、正確に必要な値が得られる可能性があります。

ここで、キーが要求された値よりも厳密に小さい値へのイテレータが必要です。それがmapではなく である場合multimap、ここで説明されているように、これを達成するのは比較的簡単です: Returning the maximum keystrictly less than the given key in a C++ Map . しかし、multimapでは、反復子をデクリメントしても、厳密に小さいキーを指すようになるとは限りません。したがって、より小さなキーが見つかるまで、繰り返しデクリメントする必要があります。特にいいじゃない。

これを行うよりエレガントな方法はありますか?

通常、キーは浮動小数点になります。


申し訳ありませんが、実際には 1 回のデクリメントで実行できることがわかりました。プログラムで間違って配置しただけで、それが本当のエラーでした。