Sets of pairs in C++

16 Oct, 2019
Sets are a type of associative containers in which each element has to be unique, because the value of the element identifies it. The value of the element cannot be modified once it is added to the set, though it is possible to remove and add the modified value of that element.
Pair is a simple container defined in <utility> header consisting of two data elements or objects.
The first element is referenced as ‘first’ and the second element as ‘second’ and the order is fixed (first, second).
Pair is used to combine together two values which may be different in type. Pair provides a way to store two heterogeneous objects as a single unit.
Pair can be assigned, copied and compared. The array of objects allocated in a map or hash_map are of type ‘pair’ by default in which all the ‘first’ elements are unique keys associated with their ‘second’ value objects.
To access the elements, we use variable name followed by dot operator followed by the keyword first or second.
The pairs in a set are stored in sorted order, sorted by the key i.e. the first value of the pair.
Sets of Pairs help in performing the following operations:
Add a pair, but do not allow duplicates.
Remove pairs.
Get count of distinct pairs.
Check whether a pair is present in a set or not.
The syntax for creating sets of pairs is:
set<pair<datatype1, datatype2>>set_name;

Example: Making pairs of all even numbers present in an array.
Input: 2 3 1 6 5 8 10 9
Output: (2, 6) (2, 8) (2, 10) (6, 8) (6, 10) (8, 10)

Input: 4 4 6 4
Output: (4, 4) (4, 6)

Input: 24 24 24 24
Output: (24, 24)

Input: 7, 100, 53, 81
Output: No valid pair

Below program illustrate the solution to above problem:
In this example, range-base for loop is used with const reference for speed and security which iterates over all elements in the container. Variable ‘x’ is of type ‘pairs’. To access the elements of the pair, use variable name followed by dot operator followed by the keyword ‘first’ or ‘second’, these are public members of class pair.
Program:
// C++ program to create Set of Pairs  #include <bits/stdc++.h>using namespace std;  typedef pair<int, int> pairs;  // Constant reference// reference for speed const to avoid changing valuesvoid display(const set<pairs>& s){    bool found = false;      // range-based for loop    for (auto const &x : s) {        found = true;        cout << "(" << x.first << ", "             << x.second << ")"             << " ";    }      if (not found) {        cout << "No valid pair\n";    }}int main(){    vector<int> v{ 2, 3, 1, 6, 8, 8, 10, 2 };     set<pairs> s;                for (int i = 0; i < v.size() - 1; i++) {        for (int j = i + 1; j < v.size(); j++) {              // check for even number            if (v[i] % 2 == 0 && v[j] % 2 == 0) {                  // makes pairs of even numbers                pairs x = make_pair(v[i], v[j]);                  // inserts into the set                s.insert(x);            }        }    }      // to display the pairs    display(s);      // to clear the set    s.clear();}
(2, 2) (2, 6) (2, 8) (2, 10) (6, 2) (6, 6) (6, 8) (6, 10) (8, 2) (8, 8) (8, 10) (10, 2) (10, 10)

rathod_sahaab
Akanksha_Rai
sidsin4
CPP-Library
cpp-pair
cpp-set
STL
Technical Scripter 2018
C++ Programs
Technical Scripter
STL
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Passing a function as a parameter in C++
Const keyword in C++
Program to implement Singly Linked List in C++ using class
cout in C++
Different ways to print elements of vector
Why it is important to write "using namespace std" in C++ program?
Dynamic _Cast in C++
string::npos in C++ with Examples
Maximum value of long long int in C++
How to convert a Vector to Set in C++