Как преобразовать std :: set в std :: array? - PullRequest
0 голосов
/ 19 мая 2019

У меня есть std :: set, и мне нужно преобразовать его в std :: array.Порядок элементов не имеет значения.

Обратное преобразование кажется простым, потому что я могу просто сделать:

std::array<T> array;
std::set<T> set(array.begin(), array.end());

Но, к сожалению, std :: array не имеет конструктора, подобного этомупоэтому я не могу сделать:

std::set<T> set;
std::array<T> array(set.begin(), set.end());

Какой правильный способ такого преобразования?

1 Ответ

1 голос
/ 19 мая 2019

Как упоминалось в комментариях выше, std::array не подходит для этого, так как размер должен быть известен во время компиляции.std::vector является подходящей заменой.

Вот один из способов заполнения vector из set.Это должно быть просто преобразовать это в шаблон.Обратите внимание на использование reserve для эффективности:

#include <iostream>
#include <set>
#include <vector>
#include <algorithm>

int main()
{
    std::set <int> s = { 1, 2, 3, 4, 5 };
    std::vector <int> v;
    v.reserve (s.size ());
    std::copy (s.begin (), s.end (), std::back_inserter (v));
    for (auto i : v)
        std::cout << i << '\n';
}

Live демо

...