相关疑难解决方法(0)

将整数集转换为范围

将一组整数转换为一组范围的最惯用的方法是什么?

例如,给定{0,1,2,3,4,7,8,9,11}我想得到{{0,4},{7,9},{11,11}}.

让我们说我们正在转变std::set<int>std::vector<std::pair<int, int>>.我认为Ranges在双方都是包容性的,因为在我的情况下它更方便,但如果有必要我也可以使用开放式范围.

我写了以下功能,但我觉得要重新发明轮子.请告诉我们STL中有什么东西或者提升它.

typedef std::pair<int, int> Range;

void setToRanges(const std::set<int>& indices, std::vector<Range>& ranges)
{
    Range r = std::make_pair(-INT_MAX, -INT_MAX);

    BOOST_FOREACH(int i, indices)
    {
           if (i != r.second + 1)
           {
            if (r.second >= 0) ranges.push_back(r);
            r.first = i;                    
           }

           r.second = i;
    }

    ranges.push_back(r);
}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm range set

6
推荐指数
1
解决办法
2369
查看次数

标签 统计

algorithm ×1

c++ ×1

range ×1

set ×1