3

下面的代码应该在 Boost 区间图中插入两个具有关联值 0 和 1 的区间,但它只插入了一个:

#include <iostream>

#include <boost/icl/interval_map.hpp>

using Interval = boost::icl::interval<int>;
using IMap = boost::icl::interval_map<int, int>;

int main()
{
  IMap m;
  m += std::make_pair(Interval::right_open(0, 7), 0);  // <== ignored?
  m += std::make_pair(Interval::right_open(8,15), 1);
  std::cout << m << std::endl;
}

输出:

{([8,15)->1)}

如果我将“忽略”行的值更改为 1,它将正确插入该对。

这是为什么?

4

1 回答 1

1

任何“无值”的域区间在共域中都有一个隐含的“0”。反之亦然。我想下面的示例会立即有意义:

m += std::make_pair(Interval::right_open(8,15), 1);
m -= std::make_pair(Interval::right_open(8,15), 1);

结果是一张空地图。

请参阅地图特征

Icl 映射的行为不同,取决于它们如何处理关联类型 CodomainT 的标识元素。

特别是在标识元素的定义和存储下

第二个特征与地图中身份元素的表示有关。icl 图可以是身份吸收器或身份丰富器。

  • 标识吸收器从不存储带有标识元素的值对 (k,0)。
  • 身份丰富器存储值对 (k,0)。
于 2018-06-12T21:45:19.367 回答