2016-01-24 44 views
0

在斯卡拉排序,我需要创建一个包含以下内容的结构:结构的值,而不是键

  • 一个Bitset - 代表是占据一些细胞或不
  • Int - 最后一个单元格占用
  • 一个Int - 本职业

的成本,因为一个元素唯一地由的组合识别代表占据细胞和Int代表的最后一个单元所占据,我尝试使用以下:

var tm = TreeMap.empty[Path, Int] 

其中Path是:

case class Path(occupied: BitSet, last: Int) 

然而,问题是,我想中的元素进行排序TreeMap由他们的成本(所以由他们的价值)。这显然不适用于TreeMap

所以我可以有一个结构,我的价值而不是关键的元素排序?

回答

2

我想你寻找一个分类,然后设置:

import scala.collection.immutable.BitSet 
import scala.collection.immutable.SortedSet 

case class Path(occupied: BitSet, last: Int, cost: Int) 

implicit val pathOrd = Ordering.by((p: Path) => p.cost) 

SortedSet.empty[Path] 

假设costPath领域。如果成本是从Path计算的,则还可以定义:

case class Path(occupied: BitSet, last: Int) { 
    def cost: Int = ??? 
} 
+0

谢谢!我想通过'occup'和'last'来唯一标识'Path'元素,而不是'cost'。我可以使用'SortedSet'来做到这一点吗? – octavian

+1

@octavian是的,如果您将'cost'定义为方法(参见上面的代码)或第二个构造函数参数列表,例如'case class Path(占用:BitSet,last:Int)(val cost:Int)'。案例类的身份只考虑第一个列表的参数。 –

+0

'case class Path(占用:BitSet,last:Int)(val cost:Int)'不适用于我。当我尝试实例化类时出现错误: '错误:缺少构造函数的路径类路径中的路径 新路径(newBs,newLast)' – octavian

相关问题