标签: rangeset

用于C++的整数区间的容器,例如RangeSet

我正在尝试使用范围,如数字范围.我的意思是整数区间,在数学中说.我想存储一组它们.我也希望这个集合自然地合并(或合并)我插入的范围.

让我们来看一个简单的例子,我从一个空集开始:{}

  • 我插入范围[0,5],现在我有{[0,5]}
  • 我插入范围[10,15],现在我有{[0,5],[10,15]}
  • 我插入范围[5,7],现在我有{[0,7],[10,15]}
  • 我插入范围[12,17],现在我有{[0,7],[10,17]}
  • 我插入范围[6,13],现在我有{[0,17]}

我发现了一个类似的问题,它在Java中作为Google Guava库存在,并被称为RangeSet.

我最初想的是使用一个将在下限排序std::setstd::pairs(所以每对的第一个元素).然后在每次插入后,我将不得不手动合并任何重叠集.

因为这似乎是一个常见问题,由于C++中"range"的所有同义词的噪音,我找不到一个好的实现方法?或者有人关心分享他自己的?如果您有其他设置操作,我只想打印最终范围,但是要获得一般性的奖励积分.

c++ c++11 rangeset

11
推荐指数
2
解决办法
5473
查看次数

Scala中有范围数据结构吗?

我正在寻找一种处理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)

scala range rangeset

3
推荐指数
1
解决办法
1293
查看次数

标签 统计

rangeset ×2

c++ ×1

c++11 ×1

range ×1

scala ×1