11

昨夜、3 つの異なるキー値でアクセスする必要があり、配列のセマンティクスを再調整する必要があるコレクションに頭を悩ませているときに、ひばりで multi_index に出くわしました。さて、私は 2 つの願い (3 つの異なるキー値) のうちの 1 つを で手に入れましたboost::multi_index

Javaの世界に似たようなものはありますか?

4

5 に答える 5

2

古い質問を復活させますが、解決策としてCQEngineを見てください。

背景については、関連する質問Java (Criteria/SQL-like) でオブジェクト コレクションを照会するにはどうすればよいですか?も参照してください。

于 2013-05-20T09:47:15.877 に答える
2

Java で MultiIndexContainer を完成させました: http://code.google.com/p/multiindexcontainer/wiki/MainPage。boost multi_index_container と完全に同等ではないことはわかっていますが、要件には十分かもしれません。

于 2011-03-22T21:12:52.153 に答える
1

短い答えはノーだと思います。明らかな同等物はありません。

ブースト マルチインデックス クラスは非常に高度にテンプレート化されているため、Java で簡単に翻訳することはできません。ジェネリックもありますが、まったく同じではありません。( Java ジェネリックは C++ テンプレートとどう違うのですか? int をパラメーターとして使用できないのはなぜですか? )。

では、テンプレート化がなければ、マルチインデックス クラスはどのようになるでしょうか?

Map 実装のようなインデックス メンバーを含む、Person などのデータ クラスがあると思います。この時点で、次の選択肢があります。

  1. Person クラスにいくつかの「インデックス」を直接追加し (いくつかの Hashtable など)、ルックアップ関数を記述します。Person クラス内でインデックスの同期を管理します。
  2. インデックス機能を Person から完全に分離する「IndexProvider」クラスを作成します。さまざまなインデックス タイプを動的に作成できる必要があり、コールバックを介して同期を処理することになると思います。
  3. 1) と 2) の混合 - インデックス機能の抽象基本クラスのように、動作を適切に分離しませんが、コードの再利用を提供します。

ほとんどの場合、1) が最も書きやすく、維持しやすく、おそらく最もパフォーマンスが高いと思います。2) オーバーエンジニアリングのようです。

もう 1 つのオプションは、インデックス作成が必要なデータ構造が多数ある場合、それらをデータベースに格納することです。

于 2010-09-04T16:04:11.813 に答える
-1

Google guava ライブラリで答えを見つけることができると思います。おそらくマルチマップがあなたのニーズを解決します。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

これらのスレッドでコメントされているように:

于 2015-01-22T11:20:43.333 に答える
-2

boost::multi_index が何を意味するのかわかりませんが、質問の残りの部分に基づいて、マルチキーマップについて話している可能性があると思います

于 2010-06-18T14:50:12.850 に答える