问题标签 [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.
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
适合我的目的?
c++ - 在为请求选择服务的情况下,是否可以使用 Boost ICL 而不是 for_each 并且合理?
我有一个request
结构std::vector<std::string> arguments
。我有一个std::map<std::string, std::vector<std::string> > services
where 键是服务名称,值是服务响应的参数向量。不同服务的参数可能重叠(N
服务可能具有相同或部分相同的参数)。我需要找到与给定请求相对应的所有服务。我想知道使用Boost ICL而不是我用于服务选择的当前 for_each是否会更好(从代码易用性或阅读和请求选择速度最重要)(我只是迭代每个服务并查看它是否有任何参数在请求中提出)?
c++ - 有没有办法获取 boost::icl::interval_map 中的间隔数?
是否有一种内置方法可以获取 boost::icl::interval_map 中的间隔数?我在文档中找不到它。方法size()似乎有不同的目的。
boost - 是否可以在 boost interval_map 中存储值列表?
我有如下代码:
这很好用。
但是如果我在上面的代码中将“set”更改为“list”,boost 会抱怨。
是否仅支持“集合”作为值?
谢谢!
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。
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 类型进行硬编码?
谢谢,安德烈
c++ - 使用 C++ Boost 间隔容器库 (ICL) 时如何移动间隔?
如何使用 Boost 间隔容器库移动离散间隔?
即我想从区间的lower() 和区间的upper() 中减去整数c?显然我可以创建一个新的间隔,但我正在寻找规范的方法来做到这一点。
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 的效率问题是什么? 以及如何避免它们?
c++ - 尝试为枚举重载 operator+= 时出现编译器错误
我在尝试为我在命名空间中定义的枚举重载 += 运算符时遇到了一些问题。我不需要实际使用该运算符,但是,我正在使用的库 (boost::icl) 要求为我在区间图中存储的数据定义 += 运算符。每当我尝试编译下面的代码时,都会使用 Intel C++ 得到以下编译器错误:
有什么建议么?
测试.h:
测试.cpp:
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
时间点不属于区间范围,我不知道如何找到最近的区间在那个时间点之前,以及如何检测我是否必须回去一天或整个周末。