96 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Set | |||
|  | --- | |||
|  | 
 | |||
|  | A set data structure in c++ is defined the same way a set is defined in the context of mathematics.  | |||
|  | 
 | |||
|  | More formally speaking, Sets are a type of associative containers in which each element has to be unique. | |||
|  | * The value of the element cannot be modified once it is entered, although deleting an element and inserting a new element is allowed, the same way we do in mathenatics. | |||
|  | * Set data sructure can be used to model, well, sets itself. It becomes easy to find intersections, unions etc. | |||
|  | * Similar to vector, but only unique values are allowed. | |||
|  | * Set arranges the elements in increasing order as and when you insert elements into the set.  | |||
|  | 
 | |||
|  | The header file required for using the set data structure is 'set'. i.e, `#include<set>` must be there in your code for you to use the set data structure.     | |||
|  |      | |||
|  | __Pro tip__:- Use `#include<bits/stdc++.h>` to include all C++ data structures and functions, instead of adding them one by one.     | |||
|  | <br> | |||
|  | Some of the functions that can be performed with a set:-  | |||
|  | 
 | |||
|  | 1. begin() – Returns an iterator to the first element in the set | |||
|  | 1. end() – Returns an iterator to the theoretical element that follows last element in the set | |||
|  | 1. size() – Returns the number of elements in the set | |||
|  | 1. max_size() – Returns the maximum number of elements that the set can hold | |||
|  | 1. empty() – Returns whether the set is empty | |||
|  | 1. erase(const g)- Removes the value ‘g’ from the set | |||
|  | 1. clear() – Removes all the elements from the set | |||
|  | 
 | |||
|  | 
 | |||
|  | Let us look at an example :-  | |||
|  | ```cpp | |||
|  | #include <iostream> 
 | |||
|  | #include <set> 
 | |||
|  | #include <iterator> 
 | |||
|  |    | |||
|  | using namespace std;  | |||
|  | int main()  | |||
|  | {  | |||
|  |     set <int> myset;   //an empty set container. Note that size of the set need not be declared, similar to vector.        | |||
|  |    | |||
|  |     // insert elements in random order  | |||
|  |     myset.insert(65);  | |||
|  |     myset.insert(30);  | |||
|  |     myset.insert(80);  | |||
|  |     myset.insert(20);  | |||
|  |     myset.insert(9);  | |||
|  |     myset.insert(9); // only one 9 will be added to the list.  | |||
|  |   | |||
|  |    | |||
|  |     // printing set myset  | |||
|  |     set <int> :: iterator itr; //an iterator is like a pointer. | |||
|  |     cout << "\nThe contents of myset : ";  | |||
|  |     for (itr = myset.begin(); itr != myset.end(); ++itr)  | |||
|  |     {  | |||
|  |         cout << '\t' << *itr;  | |||
|  |     }  | |||
|  |     cout << endl;  | |||
|  |    | |||
|  |    | |||
|  |     // remove all elements up to 65 in myset from the beginning:- | |||
|  |     cout << "\nContents of myset after removal of elements less than 30 : ";  | |||
|  |     myset.erase(myset.begin(), myset.find(30));  | |||
|  |     for (itr = myset.begin(); itr != myset.end(); ++itr)  | |||
|  |     {  | |||
|  |         cout << '\t' << *itr;  | |||
|  |     }  | |||
|  |    | |||
|  |     // remove element with value 50 in myset | |||
|  |     | |||
|  |     int num = myset.erase(80); //returns true (and deletes) if 80 is there in the list else returns 0. | |||
|  |     cout<<"\n\n After doing myset.erase(80), "<<num<<" element is removed\n\n"; | |||
|  |     cout<<"Contents of the modified set:\t"; | |||
|  |     for (itr = myset.begin(); itr != myset.end(); ++itr)  | |||
|  |     {  | |||
|  |         cout << '\t' << *itr;  | |||
|  |     }  | |||
|  |    | |||
|  |     cout << endl;  | |||
|  |   | |||
|  |    | |||
|  |     return 0;  | |||
|  |    | |||
|  | } | |||
|  | ``` | |||
|  | ```cpp | |||
|  | Output:-  | |||
|  | The contents of myset : 	9	20	30	65	80 | |||
|  | 
 | |||
|  | Contents of myset after removal of elements less than 30 : 	30	65	80 | |||
|  | 
 | |||
|  |  After doing myset.erase(80), 1 element is removed | |||
|  | 
 | |||
|  | Contents of the modified set:		30	65 | |||
|  |   ``` | |||
|  |    | |||
|  |   ### Sources | |||
|  |  1. [Geeks for Geeks](https://www.geeksforgeeks.org/set-in-cpp-stl/)  |