1

ソートされたマルチマップを取得する方法を見つけようとしています。私の問題を解決できる2つの別々のコレクションデータ構造を提供するGuavaをチェックしました。印象的なのは、SortedSetMultimap が同一のキーを含むことができないことです。これは、Multimap が同じシンボル内にある間は Set であるためです。どうしたの?

編集

C++ では、私は Java で同様の機能を使用する方法を教えてくれることを願っています。

  struct KeyCompare : public binary_function<pair<double,double>, pair<double,double>, bool>
  {
    bool operator()(const pair<double,double>& p1, const pair<double,double>& p2) const;
  };

  multimap<pair<double,double>, Object*, KeyCompare> _list;

  .../...

  KeyCompare key_compare;

  while (( ! _list.empty() && key_compare(_list.begin()->first, k))) {

    u = _list.begin()->second;
    v = _list.begin()->first;

英語で: 値に含まれる何らかのオブジェクトを参照する double のペアであるキーを持つマップが必要です。マップには同一の複数のキーが含まれる可能性があるため (2 つの数値の同じペアが発生します)、これはマルチマップまたはバッグである必要があります。これが発生すると、要素をコレクションに挿入できます。最上位の要素を選択すると、それらのいずれかを返す必要があります (どちらでもかまいません)。コレクションを変更可能にする必要があるのは、反復ごとに、より少ない要素を選択してマップから削除するためです。

4

1 に答える 1

3

あなたはおそらく探していMultimapBuilder.treeKeys().arrayListValues().build()ますか?

コンパレータを渡す必要がある場合は、次のようになります

 MultimapBuilder.treeKeys(new Comparator<Pair<Double, Double>>() {
      @Override public int compare(Pair<Double, Double> p1, Pair<Double, Double> p2) {
        return ComparisonChain.start()
            .compare(p1.first(), p2.first())
            .compare(p1.second(), p2.second())
            .result();
      }
    }).arrayListValues().build();
于 2015-07-18T19:16:17.043 に答える