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/) 
							 |