How to Convert Set to Vector in C++?
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:149 次

cplusplus
Let’s say our task is to convert a set or unordered_set in C++ to std::vector, what would you do?
Given the following set with integers (or other types)
1 | unordered_set<int> data; |
unordered_set<int> data;
We want to convert it to:
1 | vector<int> target; |
vector<int> target;
Using a Loop to copy a C++ set to std::vector
Intuitively, we can push to the vector one by one, in a loop, by reading the elements in the set.
1 2 3 4 | vector<int> target; for (const auto &it: data) { target.push_back(it); } |
vector<int> target;
for (const auto &it: data) {
target.push_back(it);
}Alternatively, we can pre-allocate the size of the vector, and use something like this (slightly a bit faster):
1 2 3 4 | vector<int> target(data.size()); for (int i = 0; i < data.size(); ++ i) { target[i] = data[i]; } |
vector<int> target(data.size());
for (int i = 0; i < data.size(); ++ i) {
target[i] = data[i];
}Using vector constructor to convert a C++ set to std::vector
In the constructor of the vector, we can pass the iterator of begin and end for the input set, like below:
1 | vector<int> target(data.begin(), data.end()); |
vector<int> target(data.begin(), data.end());
Using vector.assign to convert a C++ set to std::vector
We can use the std::vector.assign() method that takes the begin and end iterator of the source set/unordered_set – which will allow us to convert/copy a C++ set to std::vector, like below.
1 2 | vector<int> target; target.assign(data.begin(), data.end()); |
vector<int> target; target.assign(data.begin(), data.end());
Using std::copy to copy a C++ set to std::vector
Using std::copy, we can specify the begin and end iterator of the source data to copy from, and the begin iterator of the target data source, like this:
1 2 | vector<int> target(data.size()); std::copy(data.begin(), data.end(), target.begin()); |
vector<int> target(data.size()); std::copy(data.begin(), data.end(), target.begin());
We have to make sure the target data has enough space/storage to copy the data to, thus, the target vector has to be pre-allocated.
Alternatively, we can use the back_inserter that will insert at the end of the target vector, thus no need to allocate the target vector.
1 2 | vector<int> target; std::copy(data.begin(), data.end(), std::back_inserter(res)); |
vector<int> target; std::copy(data.begin(), data.end(), std::back_inserter(res));
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:数学题:问乙等了甲多长时间? 数学题:一个商人骑一头驴要穿越1000公里长的沙漠 数学题:有一个底面周长为9.42厘米的圆柱体,斜着截去一段 百度算法经常更新要怎么解决? 讲一讲我这10年的站长经历 为什么企业网站不要用模板建站 模板建站有哪些弊端 网站安全渗透测试难度系数有多大 什么内容才是被百度肯定的优质内容?优质内容应该这样做! seo-网站权重怎么提高? 万词霸屏与SEO优化合二为一才能给企业带来真实效益
- 评论列表
-
- 添加评论