C++ 是什么使得Boost'interval_map'忽略插入?
下面的代码应该将两个相关值为0和1的间隔插入到增压间隔映射中,但它只插入一个:C++ 是什么使得Boost'interval_map'忽略插入?,c++,boost-icl,C++,Boost Icl,下面的代码应该将两个相关值为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 += st
#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;
}
如果我将“忽略”行的值更改为1,它将正确插入该对
这是为什么?任何具有“无值”的域间隔在co域中都有一个隐式的“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)
我认为该页面更好地描述了身份元素的情况。你可以更新你的答案,我会接受的it@HEKTO你说得很对。我记得读过,但找不到那一页。确实好多了。
m += std::make_pair(Interval::right_open(8,15), 1);
m -= std::make_pair(Interval::right_open(8,15), 1);