昨夜、3 つの異なるキー値でアクセスする必要があり、配列のセマンティクスを再調整する必要があるコレクションに頭を悩ませているときに、ひばりで multi_index に出くわしました。さて、私は 2 つの願い (3 つの異なるキー値) のうちの 1 つを で手に入れましたboost::multi_index
。
Javaの世界に似たようなものはありますか?
昨夜、3 つの異なるキー値でアクセスする必要があり、配列のセマンティクスを再調整する必要があるコレクションに頭を悩ませているときに、ひばりで multi_index に出くわしました。さて、私は 2 つの願い (3 つの異なるキー値) のうちの 1 つを で手に入れましたboost::multi_index
。
Javaの世界に似たようなものはありますか?
古い質問を復活させますが、解決策としてCQEngineを見てください。
背景については、関連する質問Java (Criteria/SQL-like) でオブジェクト コレクションを照会するにはどうすればよいですか?も参照してください。
Java で MultiIndexContainer を完成させました: http://code.google.com/p/multiindexcontainer/wiki/MainPage。boost multi_index_container と完全に同等ではないことはわかっていますが、要件には十分かもしれません。
短い答えはノーだと思います。明らかな同等物はありません。
ブースト マルチインデックス クラスは非常に高度にテンプレート化されているため、Java で簡単に翻訳することはできません。ジェネリックもありますが、まったく同じではありません。( Java ジェネリックは C++ テンプレートとどう違うのですか? int をパラメーターとして使用できないのはなぜですか? )。
では、テンプレート化がなければ、マルチインデックス クラスはどのようになるでしょうか?
Map 実装のようなインデックス メンバーを含む、Person などのデータ クラスがあると思います。この時点で、次の選択肢があります。
ほとんどの場合、1) が最も書きやすく、維持しやすく、おそらく最もパフォーマンスが高いと思います。2) オーバーエンジニアリングのようです。
もう 1 つのオプションは、インデックス作成が必要なデータ構造が多数ある場合、それらをデータベースに格納することです。
Google guava ライブラリで答えを見つけることができると思います。おそらくマルチマップがあなたのニーズを解決します。
https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained
これらのスレッドでコメントされているように:
boost::multi_index が何を意味するのかわかりませんが、質問の残りの部分に基づいて、マルチキーマップについて話している可能性があると思います