创建STL的最简单方法是什么 - 身份图?

时间:2009-02-13 10:51:19

标签: c++ stl map

我想初始化一个地图 - 对象“id”,其身份从0到n-1,即

 id[0] = 0
 id[1] = 1
 .
 .
 id[n-1] = n-1

有没有一种简单的方法 - 一个单行,一个方法在map-object中,只是一些非常简单的东西 - 那样做呢?

4 个答案:

答案 0 :(得分:5)

有什么问题
for(unsigned int i = 0; i < n; ++i)
    id[i] = i;

答案 1 :(得分:3)

您可以使用

template <class InputIterator>
map(InputIterator f, InputIterator l,
    const key_compare& comp)

构造函数的形式,但是您需要构建一个InputIterator,它在您想要的范围内充当生成器函数。这比单独使用for循环要多得多。

答案 2 :(得分:3)

使用密钥为简单索引的地图似乎有点奇怪。你确定你不能使用矢量吗?这样做,您可以使用boost::counting_iterator填充向量:

std::vector<int> v(boost::counting_iterator<int>(0), 
                   boost::counting_iterator<int>(N-1));
// v is filled with integers from 0 to N-1

然而,与简单的for循环相比,我不确定这是否是一个巨大的收获。

答案 3 :(得分:0)

请注意std :: iota作为数字库(C ++ 0x功能)的一部分:

template <ForwardIterator Iter, HasPreincrement T>
requires OutputIterator<Iter, const T&>
void iota(Iter first, Iter last, T value);