set vs map in C++ STL

set and map in STL are similar in the sense that they both use Red Black Tree (A self balancing BST). Note that the time complexities of search, insert and delete are O(Log n).

Differences:
The difference is set is used to store only keys while map is used to store key value pairs. For example consider in the problem of printing sorted distinct elements, we use set as there is value needed for a key. While if we change the problem to print frequencies of distinct sorted elements, we use map. We need map to store array values as key and frequencies as value.

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of set
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    set<int> s1;
    s1.insert(2);
    s1.insert(5);
    s1.insert(3);
    s1.insert(6);
  
    cout << "Elements in set:\n";
    for (auto it : s1)
        cout << it << " "; // Sorted
  
    return 0;
}

chevron_right


Output:



Elements in set:
2 3 5 6
filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of map
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    map<int, int> m;
  
    m[1] = 2; // Insertion by indexing
  
    // Direct pair insertion
    m.insert({ 4, 5 });
  
    // Insertion of pair by make_pair
    m.insert(make_pair(8, 5));
  
    cout << "Elements in map:\n";
    for (auto it : m)
        cout << "[ " << it.first << ", "
             << it.second << "]\n"; // Sorted
  
    return 0;
}

chevron_right


Output:

Elements in map:
[ 1, 2]
[ 4, 5]
[ 8, 5]

Variations of set and map:
Set and Map, both stores unique values and sorted values as well. But If we don’t have such a requirement, we use multiset/multimap and unordered_set/unoredred_map.
Multimap: Multimap doesn’t allow elements to stored by indexing.

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of Multimap
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    multimap<int, int> m;
  
    m.insert({ 1, 2 });
    m.insert({ 2, 3 });
    m.insert({ 4, 5 });
    m.insert({ 2, 3 });
    m.insert({ 1, 2 });
  
    cout << "Elements in Multimap:\n";
    for (auto it : m)
        cout << "[ " << it.first << ", "
             << it.second << "]\n"; // Sorted
  
    return 0;
}

chevron_right


Output:

Elements in Multimap:
[ 1, 2]
[ 1, 2]
[ 2, 3]
[ 2, 3]
[ 4, 5]

Multiset:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of Multiset
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    multiset<int> ms;
  
    ms.insert(1);
    ms.insert(3);
    ms.insert(4);
    ms.insert(2);
    ms.insert(2);
  
    cout << "Elements in Multiset:\n";
    for (auto it : ms)
        cout << it << " ";
  
    return 0;
}

chevron_right


Output:

Elements in Multiset:
1 2 2 3 4

Unordered_set:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of Unordered_set
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    unordered_set<int> us;
  
    us.insert(1);
    us.insert(3);
    us.insert(4);
    us.insert(2);
    us.insert(2);
  
    cout << "Elements in unordered_set:\n";
    for (auto it : us)
        cout << it << " "; // Sorted
  
    return 0;
}

chevron_right


Output:

Elements in unordered_set:
2 4 1 3

Unordered_map:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to demonstrate working of Unordered_map
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    unordered_map<int, int> um;
  
    um[1] = 2;
    um[4] = 5;
    um[2] = 3;
    um[8] = 5;
    um[3] = 6;
  
    cout << "Elements in unordered_map:\n";
    for (auto it : um)
        cout << "[ " << it.first << ", " << it.second << "]\n";
  
    return 0;
}

chevron_right


Output:

Elements in unordered_map:
[ 3, 6]
[ 2, 3]
[ 8, 5]
[ 1, 2]
[ 4, 5]


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : hansschukkink