Set in C++ Standard Template Library (STL)


06 Jul, 2022

Sets are a type of associative containers in which each element has to be unique because the value of the element identifies it. The values are stored in a specific order. 
Syntax:
set<datatype> setname;
Datatype: Set can take any data type depending on the values, e.g. int, char, float, etc.
Example:
set<int> val; // defining an empty set
set<int> val = {6, 10, 5, 1}; // defining a set with values
Note: set<datatype, greater<datatype>> setname; is used for storing values in a set in descending order.
Properties:

The set stores the elements in sorted order.
All the elements in a set have unique values.
The value of the element cannot be modified once it is added to the set, though it is possible to remove and then add the modified value of that element. Thus, the values are immutable.
Sets follow the Binary search tree implementation.
The values in a set are unindexed.

The set stores the elements in sorted order.
All the elements in a set have unique values.
The value of the element cannot be modified once it is added to the set, though it is possible to remove and then add the modified value of that element. Thus, the values are immutable.
Sets follow the Binary search tree implementation.
The values in a set are unindexed.
Note: To store the elements in an unsorted(random) order,  unordered_set() can be used.
Some Basic Functions Associated with Set: 
begin() – Returns an iterator to the first element in the set.
end() – Returns an iterator to the theoretical element that follows the last element in the set.
size() – Returns the number of elements in the set.
max_size() – Returns the maximum number of elements that the set can hold.
empty() – Returns whether the set is empty.
The time complexities for doing various operations on sets are –
Insertion of Elements – O(log N)
Deletion of Elements – O(log N)
CPP
 

 
 










// CPP program to demonstrate various functions of 
// Set in C++ STL 
#include <iostream> 
#include <iterator> 
#include <set> 
  
using namespace std; 
  
int main() 
{ 
    // empty set container 
    set<int, greater<int> > s1; 
  
    // insert elements in random order 
    s1.insert(40); 
    s1.insert(30); 
    s1.insert(60); 
    s1.insert(20); 
    s1.insert(50); 
  
    // only one 50 will be added to the set 
    s1.insert(50); 
    s1.insert(10); 
  
    // printing set s1 
    set<int, greater<int> >::iterator itr; 
    cout << "\nThe set s1 is : \n"; 
    for (itr = s1.begin(); itr != s1.end(); itr++) { 
        cout << *itr << " "; 
    } 
    cout << endl; 
  
    // assigning the elements from s1 to s2 
    set<int> s2(s1.begin(), s1.end()); 
  
    // print all elements of the set s2 
    cout << "\nThe set s2 after assign from s1 is : \n"; 
    for (itr = s2.begin(); itr != s2.end(); itr++) { 
        cout << *itr << " "; 
    } 
    cout << endl; 
  
    // remove all elements up to 30 in s2 
    cout << "\ns2 after removal of elements less than 30 "
            ":\n"; 
    s2.erase(s2.begin(), s2.find(30)); 
    for (itr = s2.begin(); itr != s2.end(); itr++) { 
        cout << *itr << " "; 
    } 
  
    // remove element with value 50 in s2 
    int num; 
    num = s2.erase(50); 
    cout << "\ns2.erase(50) : "; 
    cout << num << " removed\n"; 
    for (itr = s2.begin(); itr != s2.end(); itr++) { 
        cout << *itr << " "; 
    } 
  
    cout << endl; 
  
    // lower bound and upper bound for set s1 
    cout << "s1.lower_bound(40) : \n"
         << *s1.lower_bound(40) << endl; 
    cout << "s1.upper_bound(40) : \n"
         << *s1.upper_bound(40) << endl; 
  
    // lower bound and upper bound for set s2 
    cout << "s2.lower_bound(40) :\n"
         << *s2.lower_bound(40) << endl; 
    cout << "s2.upper_bound(40) : \n"
         << *s2.upper_bound(40) << endl; 
  
    return 0; 
}






The set s1 is : 
60 50 40 30 20 10 

The set s2 after assign from s1 is : 
10 20 30 40 50 60 

s2 after removal of elements less than 30 :
30 40 50 60 
s2.erase(50) : 1 removed
30 40 60 
s1.lower_bound(40) : 
40
s1.upper_bound(40) : 
30
s2.lower_bound(40) :
40
s2.upper_bound(40) : 
60
Must Read: Sets vs Unordered Set
C++ Programming Language Tutorial | Set in C++ STL | GeeksforGeeks - YouTubeGeeksforGeeks532K subscribersC++ Programming Language Tutorial | Set in C++ STL | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 2:55•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=YuZPHhniZtw" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
BabisSarantoglou
sriphanivardhan
soumelzutshi
prateeksharan4
akgupta0777
yashvardhanudia
anshikajain26
utkarshgupta110092

cpp-containers-library


cpp-set


STL


C++


Mathematical

Mathematical
STL
CPP
Writing code in comment? 
                                    Please use ide.geeksforgeeks.org, 
                                    generate link and share the link here.