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

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

这是为什么?

最佳答案

具有“无值”的任何域间隔在共同域中都具有隐式“0”。反之亦然。我想以下示例将立即有意义:

m += std::make_pair(Interval::right_open(8,15), 1);
m -= std::make_pair(Interval::right_open(8,15), 1);
结果为空 map 。
参见Map Traits

特别是在Definedness and Storage of Identity Elements

关于c++ - 是什么使Boost `interval_map`忽略插入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50822545/

10-13 03:21