如何将std::set转换成std::array?
How to convert std::set to 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());
这种转换的正确方法是什么?
如上面评论中所述,std::array
不适合此操作,因为必须在编译时知道大小。 std::vector
是合适的替代品。
这是一种从 set
填充 vector
的方法。将其转换为模板应该很简单。注意使用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';
}
我有 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());
这种转换的正确方法是什么?
如上面评论中所述,std::array
不适合此操作,因为必须在编译时知道大小。 std::vector
是合适的替代品。
这是一种从 set
填充 vector
的方法。将其转换为模板应该很简单。注意使用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';
}