C++: How to Iterate the Elements over the Sets (set, unordered_s
- 时间:2020-09-11 08:17:29
- 分类:网络文摘
- 阅读:94 次
In C++, we use set, multiset, unordered_multiset, unordered_set to store a hash set. C++ set/multiset implements a Red-Black tree that maintains the order of the elements. On the other hand, the unordered_set and unordered_multiset are based on Hashmap/Hashtable thus the elements are not sorted.
The multiset and unordered_multiset allows storing the duplicates in the set. To iterate over the sets, we can just use the simple for loop:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <unordered_set> using namespace std; int main() { unordered_set<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; } return 0; } |
#include <iostream> #include <unordered_set> using namespace std; int main() { unordered_set<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; } return 0; }
Duplicates are stored only once. And the unordered_set does not sort the elements. Thus you may see different order e.g. 7 6 2 5 3.
Iterating over the C++ set is similar. The output shows that elements are ordered. The C++ set O(logN) update/insert/delete/query is slower than unordered_set which has O(1) constant complexity.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <set> using namespace std; int main() { set<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; // prints 2 3 5 6 7 } return 0; } |
#include <iostream> #include <set> using namespace std; int main() { set<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; // prints 2 3 5 6 7 } return 0; }
For multiset and unordered_multiset, iterating over the elements are similar except that the results will print the duplicates.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <set> using namespace std; int main() { multiset<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; // prints 2 3 3 5 6 7 } return 0; } |
#include <iostream> #include <set> using namespace std; int main() { multiset<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (const auto &n: data) { cout << n << endl; // prints 2 3 3 5 6 7 } return 0; }
Note that the C++ multiset is included in set header and unordered_multiset is provided in unordered_set header.
Alternatively, we can increment the iterator to start from begin() to end() of the sets: (set, multiset, unordered_set, and unordered_multiset). We use *it to de-reference the iterator pointer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <set> using namespace std; int main() { multiset<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (auto it = begin(data); it != end(data); it ++) { cout << *it << endl; // prints 2 3 3 5 6 7 } return 0; } |
#include <iostream> #include <set> using namespace std; int main() { multiset<int> data; data.insert(5); data.insert(3); data.insert(2); data.insert(3); data.insert(6); data.insert(7); for (auto it = begin(data); it != end(data); it ++) { cout << *it << endl; // prints 2 3 3 5 6 7 } return 0; }
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:乘飞机带行李的尺寸规定 位置问题的两种情况 小九九和大九九 加减乘除等号的来历 什么是数据 奇特的算法 如何识别身份证号220103197102131101的真伪 SEO优化和SEM搜索引擎营销,区别与联系全在这里了 SEO优化的本质是什么?为什么要懂和要做SEO优化 过度优化导致降权原因有什么?
- 评论列表
-
- 添加评论