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

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) —
推荐阅读:C++ Algorithm to Remove Outermost Parentheses How to Be Unpopular in the Coding World? How to Search in a Binary Search Tree? How to Determine Sum of Two Square Numbers? The Repeated String Match Algorithm in Javascript How to Implement the String Repeat Function in Javascript? How to Compute the Catalan Number? SQL Left Outer Join Tutorial with Example: Employee Bonus 5 Court Cases Where Social Media Played a Part 7 Legal Snares Every Blogger Should Avoid
- 评论列表
-
- 添加评论