In this article we will discuss the different ways to initialize an unordered_set.
Creating an empty unordered_set and then inserting elements in it is easy. But its not the practical scenario always. Many times we need to initialize an unordered_set while creation. For that it provides different overloaded constructors and we will use some of them to initialize an unordered_set from an another datastructure i.e.
Initializing an unordered_set from an array
unordered_set provides a constructor that accepts a range of iterators and try to insert all elements in while iterating from start to end of range i.e.
// Array of int int arr[] = {2,4,6,1,3,6,8,3,2}; // Create an unoredered set and initialize it with the array // Set will contain only unique elements std::unordered_set<int> setOfNum(arr, arr + sizeof(arr)/sizeof(int));
Above set will contain only unique elements from array and store them in arbitrary order.
Initializing an unordered_set by an initialzer list
unordered_set provides a constructor that accepts an initialzer_list as an argument and initialize the set with them i.e.
// Create an unoredered set and initialize it initializer_list std::unordered_set<int> setOfNum2({1,2,3,1,3,4,2});
Initializing an unordered_set with a vector
For this we will use the same constructor of unordered_set that accepts a range of iterators and initialize set with all elements in range i.e.
Frequently Asked:
- How to Search an element in unordered_set
- Using unordered_set with custom hasher and comparision function
- How to use Unordered_set with User defined classes – Tutorial & Example
- How to Insert elements in an unordered_set in C++11
std::vector<int> vec({14,5,6,7}); // Create an unoredered set and initialize it with vector std::unordered_set<int> setOfNum3(vec.begin(), vec.end());
Complete Working example is as follows,
#include <iostream> #include <unordered_set> #include <algorithm> #include <vector> int main() { // Array of int int arr[] = { 2, 4, 6, 1, 3, 6, 8, 3, 2 }; // Create an unoredered set and initialize it with the array // Set will contain only unique elements std::unordered_set<int> setOfNum(arr, arr + sizeof(arr) / sizeof(int)); // Iterate over the set and display contents for (int val : setOfNum) std::cout << val << " "; std::cout << std::endl; // Create an unoredered set and initialize it initializer_list std::unordered_set<int> setOfNum2( { 1, 2, 3, 1, 3, 4, 2 }); // Set will contain only unique elements // Iterate over the set and display contents for (int val : setOfNum2) std::cout << val << " "; std::cout << std::endl; std::vector<int> vec( { 14, 5, 6, 7 }); // Create an unoredered set and initialize it with vector std::unordered_set<int> setOfNum3(vec.begin(), vec.end()); // Set will contain only unique elements // Iterate over the set and display contents for (int val : setOfNum3) std::cout << val << " "; std::cout << std::endl; }
Output:
8 3 1 6 4 2 4 3 2 1 7 6 5 14