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:
#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.
#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.
#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.
#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) —
444 wordsLast Post: How to Iterate over the Items in Java's Map (HashMap, HashTable and TreeMap)?
Next Post: How to Check if a DLL or EXE is 32-bit or 64-bit (x86 or x64) using VBScript Function?