C++: How to Iterate the Elements over the Sets (set, unordered_s
- 时间:2020-09-11 08:17:29
- 分类:网络文摘
- 阅读:139 次
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) —
推荐阅读:先别想着做什么网站赚钱了 先做好网站建设吧 个人网站站长应了解的基础知识 作为个人站长,何不入驻今日头条 对个人站长的一些思考 一位个人站长的自白 2020疫情将过 个人站长能否有机会赚钱 这次疫情下对个人站长是机会吗? 站长赚钱需要做什么准备工作? 个人站长做个网站赚钱真是越来越难了 网站站长赚钱的七条经验分享
- 评论列表
-
- 添加评论