问题标签 [boost-icl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1284 浏览

c++ - boost interval_map 是否有 operator [] 或 .at() 方法?

我正在使用来自 BOOST 库的interval_map 。

说我在人群中有这个

现在我想找出某个数字上映射的内容:我希望是这样的:

或者

但是我似乎没有找到任何这样的方法。

我真的需要将另一个区间图定义为“窗口”并进行交叉吗?就像是:

0 投票
1 回答
1357 浏览

c++ - Boost ICL中“包含”函数的基本使用:区间类型和函数的某些组合没有实现吗?

我开始使用 Boost ICL,并且偶然发现了一些非常基本的东西。例如,函数contains应该根据给定元素是否在区间内返回 true 或 false。但是,这适用于[right,left]_open_intervals但不适用于[open,closed]_inteval(参见下面的示例)。

这似乎太明显而不能成为疏忽。我正在以预期的方式使用图书馆?

例如(使用 gcc 4.8 或 clang 3.3 和 Boost 1.54):

注意:以上称为“静态”间隔(因为它们的绑定属性是类型的一部分)。动态间隔按预期工作。

0 投票
2 回答
1727 浏览

c++ - 提升 ICL 映射以替换间隔中的值?

Boost.ICLinterval_map有两种行为:+=和. insert两者在不同的上下文中都很有用。第一个将两个现有区间的公共交点处的值相加。第二个只是在先前未分配的间隔中引入新值(在先前分配的间隔中保留该值)。

但是,我需要一种略有不同的行为,这样,在下面的示例中,我没有得到不想要的区间图(1.,2.)->1 , (2.5,3.)->3, (3.,5.)->2,而是得到了期望的(1.,2.)->1 , (2.5,5.)->3.

也就是说,新插入的值替换旧值?我如何声明interval_map获得这种替换行为?

奖励:boost::icl::map是应该做的吗?我该如何使用它?


编辑 1:这是使用 C++11 的更明确和简化的示例代码


编辑 2: 基于@JorgeBellon 的回答的完整解决方案:

0 投票
1 回答
454 浏览

c++ - Boost ICL,区间集的基数

在 Boost ICL 中,当我在区间集上调用 cardinality() 或 size() 函数时,返回类型为 size_t,与区间类型无关。在 32 位机器上,这是一个 32 位无符号整数。但是,如果我的区间是 int64_t 类型,则基数很容易溢出 32 位整数。我在这里遗漏了一些明显的东西还是这个库的严重缺陷?

编辑:添加示例

以下代码在 64 位但在 32 位机器上编译和运行没有错误,它会抛出断言。

编辑:我在 Ubuntu 13.10 上使用 boost::icl 版本 1.49.0

编辑:

这不是一个 32/64 位的问题,因为以下代码也不适用于 64 位

0 投票
2 回答
2778 浏览

c++ - 迭代 boost::icl::interval_set

我正在迭代 a boost interval_set<unsigned_int>,并且我希望每个迭代器都是 a boost interval,其值将使用upperandlower方法访问:

但是我在方法lowerupper方法上都收到错误:Method ... could not be resolved,这表明迭代器根本没有指向 a interval

那么,我在这里真正迭代的是什么?如何迭代intervals插入到interval_set中?

编辑:添加 SSCCE:

附加信息:

  • 我目前没有在链接器中添加任何库(直到现在,没有错误提示我需要它,并且还没有找到应该添加到 -l 的参数)
    • 编译器 g++ 4.8.1
    • 增强版:1.46
0 投票
2 回答
786 浏览

c++ - N Boost interval_set 的组合

我有一项服务在 4 个不同的位置中断。我将每个位置中断建模为 Boost ICL interval_set。我想知道至少 N 个位置何时发生活动中断。

因此,按照这个答案,我实现了一个组合算法,所以我可以通过 interval_set 交叉点在元素之间创建组合。

当这个过程结束时,我应该有一定数量的 interval_set,它们中的每一个同时定义 N 个位置的中断,最后一步将加入它们以获得所需的全貌。

问题是我目前正在调试代码,当打印每个交叉点的时间到了,输出的文字就变得疯狂了(即使我是用gdb一步步调试的时候),看不到了,导致大量CPU使用。

我想我以某种方式发送以输出比我应该的更大部分的内存,但我看不出问题出在哪里。

这是一个SSCCE:

有什么帮助吗?

0 投票
1 回答
1370 浏览

c++ - 提升 interval_map 与 split_interval_map

我很难理解 interval_map 和 split_interval_map,我都实现了,结果是一样的。下面是分割区间图的代码。

输出是:

同样在上面的代码中,我将 split_interval_map 更改为 interval_map 并且输出相同。有什么我想念的吗?

0 投票
0 回答
123 浏览

c++ - 提升 icl 共享内存访问

我已经在共享内存中创建了 icl 映射,如下面的链接所述

c++ 在共享内存中提升 icl 容器

下面是代码

输出为:添加:[4,5),结果:{([4,5)->{1 7 })} 添加:[2,6),结果:{([2,4)->{1 2 3 })([4,5)->{1 2 3 7 })([5,6)->{1 2 3 })}

接下来我创建了另一个程序来访问这个地图

下面是代码

但是这个程序在 std::cout << demo->size() 这一行崩溃了。我的操作系统是 Redhat,boost 版本是 1.54,C++11。

0 投票
0 回答
197 浏览

c++ - 如何确定 Boost ICL 间期的开放性?

在 Boost.ICL 中,确定区间是封闭还是开放的规范方法是什么?

目前我正在这样做:

但这似乎并不优雅。

有确定的功能吗?(对于动态有界区间)

另外,它适用于continuous_interval吗?最后,是否有一个函数(例如模板值)可以从静态有界区间(编译类型定义的边界)确定编译类型?

0 投票
0 回答
111 浏览

boost-icl - boost::icl::contains 无法检查子集

如上所述,我正在尝试检查较小是否是较大的子集。但我得到以下输出:

有什么理由boost::icl::contains(larger, smaller)不工作但 ((smaller & larger) == smaller)工作?