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

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) —
推荐阅读:吐槽一下一些“正在吐槽百度的人 滴滴的内部赛马:网约车与出租车各自进化,一亿补贴投向快的新出租 如何写好SEO软文? SEOer众生相 2020年该如何做好网站外链建设? 摩围山作文 生活因诚信而精彩作文750字 蔷薇别墅的老鼠读后感 那些年.我们一起追过的女孩 庆“六一”作文300字
- 评论列表
-
- 添加评论