问题标签 [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 投票
3 回答
8407 浏览

c++ - 我可以用 Boost interval_map 做到这一点吗?

我想要做的是有效地处理间隔。例如,在我的示例中,间隔如下所示:

[10, 20], [15, 25], [40, 100], [5, 14]

区间是闭整数,有些区间可能会重叠。我想有效地找到给定查询的重叠间隔。例如,如果[16, 22]给出:

[10, 20], [15, 25]

上述区间应计算为重叠区间。

我目前正在编写基于 Red-Black Tree 的区间树(参考:CLRS,Introduction to Algorithms)。虽然找到所有重叠的区间可以是 O(n),但运行时间应该更快。请注意,间隔可以删除和插入。


但是,我刚刚发现Boost有interval_map并且interval_set: http: //www.boost.org/doc/libs/1_46_1/libs/icl/doc/html/index.html

我试过了,但这种行为对我来说很奇怪。例如,如果[2, 7]先插入再[3, 8]插入,则生成的映射将具有[2, 3)[3, 7](7, 8]。也就是说,当插入新的区间时,会自动完成拆分。

我可以关闭这个功能吗?或者,Boostinterval_map适合我的目的?

0 投票
1 回答
194 浏览

c++ - 在为请求选择服务的情况下,是否可以使用 Boost ICL 而不是 for_each 并且合理?

我有一个request结构std::vector<std::string> arguments。我有一个std::map<std::string, std::vector<std::string> > serviceswhere 键是服务名称,值是服务响应的参数向量。不同服务的参数可能重叠(N服务可能具有相同或部分相同的参数)。我需要找到与给定请求相对应的所有服务。我想知道使用Boost ICL而不是我用于服务选择的当前 for_each是否会更好(从代码易用性或阅读和请求选择速度最重要)(我只是迭代每个服务并查看它是否有任何参数在请求中提出)?

0 投票
2 回答
684 浏览

c++ - 有没有办法获取 boost::icl::interval_map 中的间隔数?

是否有一种内置方法可以获取 boost::icl::interval_map 中的间隔数?我在文档中找不到它。方法size()似乎有不同的目的。

0 投票
1 回答
177 浏览

boost - 是否可以在 boost interval_map 中存储值列表?

我有如下代码:

这很好用。

但是如果我在上面的代码中将“set”更改为“list”,boost 会抱怨。

是否仅支持“集合”作为值?

谢谢!

0 投票
1 回答
376 浏览

c++ - Boost ICL 未按预期工作,std::set operator+= 预期

我正在尝试使用 Boost (1.51) ICL 来简化一些区间搜索。

类型:

  • SequenceI::shp_set 是一个 std::set 共享指针
  • types::mz_t 是 Boost::Units 数量

interval_map<types::mz_t, SequenceI::shp_set>是区间图的 typedef

我有一个创建适当段的函数,然后我尝试做

然后我在编译期间收到以下错误:

如果您查看“Party”代码,没有什么特别的设置可以使事情正常进行。

我的愿望是有一个区间映射,我给它赋值,它给我一个共享指针列表(或迭代器,我不在乎),其中包含包含提供值的区间。而已。

如果ICL不能做到这一点,那我需要再找一个区间映射库,pronto。

0 投票
1 回答
1167 浏览

c++ - boost icl interval_map interval_set 模板


我已经开始使用 boost:icl 库,它非常全面和方便。我主要使用 boost::icl::interval_set 和 boost::icl::interval_map 的两种类型的间隔。有时我必须仅使用两种类型的间隔部分进行操作,而且我对执行复制功能不感兴趣。

所以这是我的例子:

getFirst() 当它是一个映射时是一个辅助函数,然后它返回 .first 当它是一个集合然后只是一个迭代器。

所以这个例子像预期的那样工作。我想要改进的是 getFirst() 函数,我不希望在 interval_map/set 中硬编码域和 codomain 类型。我试过这样的事情:

然后我改变了:

但它不起作用,编译器给出错误:

所以问题是,在这个例子中是否有可能不在 getFirst() 函数中对域和 codomain 类型进行硬编码?

谢谢,安德烈

0 投票
1 回答
406 浏览

c++ - 使用 C++ Boost 间隔容器库 (ICL) 时如何移动间隔?

如何使用 Boost 间隔容器库移动离散间隔?

即我想从区间的lower() 和区间的upper() 中减去整数c?显然我可以创建一个新的间隔,但我正在寻找规范的方法来做到这一点。

0 投票
1 回答
227 浏览

c++ - stl::map 的 stl::sets 的效率

我相信我想使用 boost::icl::interval_map 来解决问题(在此处描述,如果 interval_maps 最终有效,我将发布完整的答案。)

我想使用interval_map<unsigned long long, set<foo*>>,但 boost::icl 的文档提到存在潜在的效率问题(以下来自)。

我们使用一组字符串的区间映射来介绍区间映射,因为它具有教学优势。派对示例用于立即访问区间图和重叠聚合的基本思想。对于现实世界的应用程序,不一定建议使用一组 interval_map。它与 std::sets 的 std::map 具有相同的效率问题。尽管将区间映射与数字和其他有效数据类型一起用于关联值,但仍有一个很大的领域。

std::sets 的 std::map 的效率问题是什么? 以及如何避免它们?

0 投票
1 回答
119 浏览

c++ - 尝试为枚举重载 operator+= 时出现编译器错误

我在尝试为我在命名空间中定义的枚举重载 += 运算符时遇到了一些问题。我不需要实际使用该运算符,但是,我正在使用的库 (boost::icl) 要求为我在区间图中存储的数据定义 += 运算符。每当我尝试编译下面的代码时,都会使用 Intel C++ 得到以下编译器错误:

有什么建议么?

测试.h:

测试.cpp:

0 投票
1 回答
547 浏览

c++ - 时间间隔上的 C++ 算术

我已经有为此工作的(丑陋的)代码,但无论如何我都会问:

我在工作日有时间间隔 [09:15, 10:00), [21:10, 21:45)。给定时间t和秒数s,如果t在间隔内,我必须计算t - s将落入的日期和时间。

  • 示例:t = 20130913 21:15,s = 600,t - s 落入 20130913 09:55。
  • 示例:t = 20130923 09:16,s = 120,t - s 落入 20130920 21:44。

有没有办法在 C++ 中干净地做到这一点(boost::icl?boost::date_time?)

我试过boost::icl,它当然可以将时间范围保存在an中interval_set<Time>并找到某个区间Time,但是如果t - s时间点不属于区间范围,我不知道如何找到最近的区间在那个时间点之前,以及如何检测我是否必须回去一天或整个周末。