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