我应该使用哪个提升库来添加描述中提到的间隔

  • 本文关键字:描述 添加 我应该 c++11 boost-icl
  • 更新时间 :
  • 英文 :


我正在研究c ++程序中的间隔。我想要下面这样的东西:

我想在 for 循环中迭代添加间隔。假设我的第一个区间是 (0, 5)。我想添加一个区间 (3,6),以便生成的区间集应为 (0,3)、(3,6)。如果我添加的第三个区间是 (4,7),则我的结果区间集应为 (0,3)、(3,4)、(4,7)。

知道我应该从提升库中使用什么类型的间隔容器吗?有什么示例程序吗?

这就是我尝试过的.....

int main()
{
    icl::interval_map<double, std::string> add_map;
    using ival = icl::interval<double>;
    add_map.add({ival::open(1., 2.5), "A1"});
    std::cout<<"adding first interval-----"<<"n";
    for(auto iter : add_map)
            std::cout << iter.first << ": " << iter.second << ", "; std::cout << "n";
    add_map.add({ival::open(1.5, 5.), "B1"});
    std::cout<<"adding second interval-----"<<"n";
    for(auto iter : add_map)
        std::cout << iter.first << ": " << iter.second << ", "; std::cout << "n";
    //after adding second interval, i have to get something like (1,1.5]: A1, (1.5,5): B1 
    return 0;
}

但是我得到以下输出:添加第一个间隔-----(1,2.5): A1,

添加第二个间隔-----(1,1.5]: A1, (1.5,2.5): A1B1, [2.5,5): B1,

这就是

interval_map的工作方式:它在重叠时分裂并创建新的间隔。这使得对所有给定间隔或元素的项目的查询变得高效,请参阅此文档页面。

让我困扰的是,在文本中您提到了整数,但在您使用的代码中double.

请记住,double间隔可能存在限制问题。例如,[2, 2.5)可能与(2.5, 3)相交或不相交,具体取决于舍入。请参阅这篇文章 Boost ICL 中函数"包含"的基本用法:是否未实现区间类型和函数的某些组合?

如果你只想存储间隔,我认为你需要的数据结构是一个间隔集。

相关内容

  • 没有找到相关文章

最新更新