将一组整数转换为一组范围的最惯用的方法是什么?
例如。给定集合 {0, 1, 2, 3, 4, 7, 8, 9, 11} 我想得到 { {0,4}, {7,9}, {11,11} }。
假设我们正在转换std::set<int>
into std::vector<std::pair<int, int>>
。
我将范围视为包含双方,因为它在我的情况下更方便,但如果需要,我也可以使用开放式范围。
我已经编写了以下函数,但我想重新发明轮子。
请告诉我 STL 或 boost 中可能有一些东西可以解决这个问题。
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);
}