Array is a data structure available in C that holds a sequential collection of elements of the same type. The size of the array is fixed but can be expanded or reduced as needed. It is important to think of an array as a collection of variables of the same type, even if it is used to store a collection of data. A set (or in this case, an unordered set) is a container that stores elements of a specific data type in an arbitrary order. A hash table is used to implement unordered_set, where the keys are hashed into a hash table index to help ensure that insertions are always random.
Conversion from an array to an unordered set can be accomplished using various methods that we discuss further.
The easiest way to convert an array into an unordered set is to use a for loop and insert each array element individually into the unordered set. Next we look at the syntax and algorithm.
int ip[] = <integer array>; unordered_set<int> op; for( int i : ip) { op.insert(i); }
#include <bits/stdc++.h> using namespace std; template <size_t N> unordered_set<int> solve( int (&ip)[N] ) { //an unorderd set is declared unordered_set<int> op; //each element is inserted using insert function for(int i : ip) { op.insert(i); } return op; } int main() { int ip[] = {50, 80, 90, 40, 30}; unordered_set<int> op = solve(ip); //display the input cout<< "The input array is: "; for(int i : ip) { cout<< i << " "; } //display the output cout<< "\nThe output set is: "; for(int j : op) { cout<< j << " "; } return 0; }
The input array is: 50 80 90 40 30 The output set is: 30 40 90 50 80
We declare an integer array ip and iterate over all elements in the array. We declare the output set as op and insert each element into the unordered set using the insertion function available in the container. The result we can see is an unordered set of values that are also present in the array.
You can also create unordered_set using its range constructor. The range constructor takes two inputs; the starting pointer of the input array and the size of the input array plus the starting pointer.
int ip[] = ; int n = sizeof(ip) / sizeof(ip[0]); std::unordered_set op(ip, ip + n);
#include <bits/stdc++.h> using namespace std; template <size_t N> unordered_set<int> solve(int (&ip)[N]) { //the size is determined of the input array int n = sizeof(ip) / sizeof(ip[0]); //output set is constructed using range constructor std::unordered_set<int> op(ip, ip + n); return op; } int main() { int ip[] = {30, 20, 50, 10, 70}; unordered_set<int> op = solve(ip); //display the input cout<< "The input array is: "; for(int i : ip) { cout<< i << " "; } //display the output cout<< "\nThe output set is: "; for(int j : op) { cout<< j << " "; } return 0; }
The input array is: 30 20 50 10 70 The output set is: 70 10 50 20 30
In this example, we have to determine the size of the array using the sizeof function. us Assign size to variable n and create unordered_set using pointers ip and ip n operate.
unordered_set can contain any type of data. To change the data type it holds, we have to change the data type contained in . The container supports primitive and user-defined types well. In practice, unordered_set works quite well, generally providing constant time search operations. All operations on unordered_set typically take constant time O(1), although in the worst case they may take up to linear time O(n), depending on the internal hash function.
The above is the detailed content of C++ program to convert array to set (hash set). For more information, please follow other related articles on the PHP Chinese website!