首页 > 解决方案 > 如何将 std::set 转换为 std::array?

问题描述

我有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());

这种转换的正确方法是什么?

标签: c++c++11std

解决方案


正如上面评论中提到的,std::array不适合这个,因为大小必须在编译时知道。 std::vector是合适的替代品。

vector这是从 a填充 a 的一种方法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';
}

现场演示


推荐阅读