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

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) —
推荐阅读:What Content Marketers Can Learn from Game of Thrones All You Need To Know About How Small Business Should Handle Soci Should You Add Live Chat to Your Blog? Food Blogger Accuses Fast Food Giant Of Stealing His Recipe Back To School 2016: How To Rock (And Profit) With Sales And Mar The Five Fundamentals to Creating a Powerhouse Blog Blog On The Go With These Mobile Apps Here’s Why Your Content is Struggling Cloud Hosting vs. Traditional Hosting: Why Hosting Your Blog in How to Compute the N-th Tribonacci Number using Iterative Dynami
- 评论列表
-
- 添加评论