Какой самый простой способ создать STL - карту идентичности? - PullRequest
2 голосов
/ 13 февраля 2009

Я хотел бы инициализировать карту - идентификатор объекта с идентификаторами от 0 до n-1, т.е.

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

Есть ли простой способ - однострочный, метод внутри объекта карты, просто что-то действительно простое - что делает это?

Ответы [ 4 ]

5 голосов
/ 13 февраля 2009

Что не так с

for(unsigned int i = 0; i < n; ++i)
    id[i] = i;
3 голосов
/ 13 февраля 2009

Кажется немного странным использовать карту с простым индексом ключа. Вы уверены, что не можете использовать вектор? При этом вы можете использовать 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 голосов
/ 13 февраля 2009

Вы можете использовать

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

форма конструктора, но вам нужно будет создать InputIterator, который работал как функция генератора в нужном вам диапазоне. Это было бы намного больше, чем просто использовать цикл for.

0 голосов
/ 16 февраля 2009

Обратите внимание на std :: iota как часть числовой библиотеки (функция C ++ 0x):

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