Open In App

Sets of pairs in C++

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.



Sets of Pairs help in performing the following operations:

The syntax for creating sets of pairs is:



set<pair<datatype1, datatype2>>set_name;

Creating Sets of Pairs

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 values
void 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();
}

Output:
(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)

Article Tags :