1

我正在尝试找到一种方法来获得排序的多图。我检查了 Guava,它提供了两个单独的集合数据结构,它们结合起来可以解决我的问题。引人注目的是 SortedSetMultimap 不能包含相同的键,因为它是一个 Set 而 Multimap 在同一个符号中。那是怎么回事?

编辑

在 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;

用英语:我需要一个映射,其键是双精度对,引用值中包含的某些对象。该映射可以包含多个相同的键(发生相同的双数对),因此这需要是一个多映射或包。发生这种情况时,可以将元素插入到集合中,并且在选择顶部元素时,它应该返回其中之一(无论哪个都无所谓)。我需要集合是可变的,因为对于每次迭代,我都会选择较小的元素并将其从地图中删除。

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 回答