是什么让Boost`region_map`忽略插入?

时间:2018-06-12 17:20:16

标签: c++ boost-icl

下面的代码应该在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)}

如果我更改&#34;忽略&#34;的值如果行为1,它将正确插入对。

为什么?

1 个答案:

答案 0 :(得分:1)

任何带有&#34;没有值的域间隔&#34;有隐含的&#34; 0&#34;在共同领域。反之亦然。我想以下样本会立即生效:

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

结果为空地图。

请参阅here

  

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

具体在Map Traits

  

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

     
      
  • 身份吸收器永远不会存储带有身份元素的值对(k,0)。
  •   
  • 身份识别器存储值对(k,0)。
  •