我正在尝试使用范围,如数字范围.我的意思是整数区间,在数学中说.我想存储一组它们.我也希望这个集合自然地合并(或合并)我插入的范围.
让我们来看一个简单的例子,我从一个空集开始:{}
我发现了一个类似的问题,它在Java中作为Google Guava库存在,并被称为RangeSet.
我最初想的是使用一个将在下限排序std::set的std::pairs(所以每对的第一个元素).然后在每次插入后,我将不得不手动合并任何重叠集.
因为这似乎是一个常见问题,由于C++中"range"的所有同义词的噪音,我找不到一个好的实现方法?或者有人关心分享他自己的?如果您有其他设置操作,我只想打印最终范围,但是要获得一般性的奖励积分.
我正在寻找一种处理Scala中范围的方法。我需要做的是:
给定一组范围和一个range(A)返回范围(B),其中range(A)与范围(B)相交不为空
给定一组范围和一个范围(A),从该范围中删除/添加范围(A)。
给定范围(A)和范围(B)创建范围(C)= [min(A,B),max(A,B)]
我在Java中看到了类似的内容-http: //docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/RangeSet.html
虽然subRangeSet仅返回相交值,但不返回集合中的范围(或与其相交的范围列表)。
RangeSet rangeSet = TreeRangeSet.create();
rangeSet.add(Range.closed(0, 10));
rangeSet.add(Range.closed(30, 40));
Range range = Range.closed(12, 32);
System.out.println(rangeSet.subRangeSet(range)); //[30,32] (I need [30,40])
System.out.println(range.span(Range.closed(30, 40))); //[12,40]
Run Code Online (Sandbox Code Playgroud)