Given an unsorted array A[]. The task is to print all **unique pairs** in the unsorted array with equal sum.

**Note**: Print the result in the format as shown in the below examples.

**Examples:**

Input:A[]= { 6, 4, 12, 10, 22, 54, 32, 42, 21, 11}Output:Pairs : ( 4, 12) ( 6, 10) have sum : 16 Pairs : ( 10, 22) ( 21, 11) have sum : 32 Pairs : ( 12, 21) ( 22, 11) have sum : 33 Pairs : ( 22, 21) ( 32, 11) have sum : 43 Pairs : ( 32, 21) ( 42, 11) have sum : 53 Pairs : ( 12, 42) ( 22, 32) have sum : 54 Pairs : ( 10, 54) ( 22, 42) have sum : 64Input:A[]= { 4, 23, 65, 67, 24, 12, 86}Output:Pairs : ( 4, 86) ( 23, 67) have sum : 90

The idea is to use map in C++ STL for avoiding duplicate pair of elements.

- Create a map with key as pair of integer and value as integer to store all unique pair of elements and their corresponding sum.
- Traverse the array and generate all possible pairs and store the pairs and their corresponding sum in first map.
- Create a second map with key as integer and value as a vector of pair to store list of all pair of elements with a corresponding sum.
- Finally, traverse the second map, and for a sum with more than one pair, print all pairs and then the corresponding sum in a format as shown in the above example.

Below is the implementation of the above approach:

`// C++ program to print all pairs ` `// with equal sum ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to print all pairs ` `// with equal sum ` `void` `pairWithEqualSum(` `int` `A[], ` `int` `n) ` `{ ` ` ` `// Map1 to store pairs and their sum, ` ` ` `// An ordered map is used here to avoid ` ` ` `// duplicate pairs of elements ` ` ` `map<pair<` `int` `, ` `int` `>, ` `int` `> mp; ` ` ` ` ` `// Insert all unique pairs and their ` ` ` `// corresponding sum in the map ` ` ` `for` `(` `int` `i = 0; i < n - 1; i++) { ` ` ` `for` `(` `int` `j = i + 1; j < n; j++) { ` ` ` `pair<` `int` `, ` `int` `> p = make_pair(A[i], A[j]); ` ` ` ` ` `mp[p] = A[i] + A[j]; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Second map with key as sum and value as ` ` ` `// list of pairs with that sum ` ` ` `map<` `int` `, vector<pair<` `int` `, ` `int` `> > > mp2; ` ` ` ` ` `// Start iterating first map mp and insert all ` ` ` `// pairs with corresponding sum in second map mp2 ` ` ` `for` `(` `auto` `itr = mp.begin(); itr != mp.end(); itr++) { ` ` ` `int` `sum = itr->second; ` ` ` `pair<` `int` `, ` `int` `> pair = itr->first; ` ` ` ` ` `mp2[sum].push_back(pair); ` ` ` `} ` ` ` ` ` `// Traverse the second map mp2, and for sum ` ` ` `// with more than one pair, print all pairs ` ` ` `// and the corresponding sum ` ` ` `for` `(` `auto` `itr = mp2.begin(); itr != mp2.end(); itr++) { ` ` ` `if` `(itr->second.size() > 1) { ` ` ` `cout << ` `"Pairs : "` `; ` ` ` ` ` `for` `(` `int` `i = 0; i < itr->second.size(); i++) { ` ` ` `cout << ` `"( "` `<< itr->second[i].first << ` `", "` ` ` `<< itr->second[i].second << ` `") "` `; ` ` ` `} ` ` ` ` ` `cout << ` `" have sum : "` `<< itr->first << endl; ` ` ` `} ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `A[] = { 6, 4, 12, 10, 22, 54, 32, 42, 21, 11, 8, 2 }; ` ` ` ` ` `int` `n = ` `sizeof` `(A) / ` `sizeof` `(A[0]); ` ` ` ` ` `pairWithEqualSum(A, n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

Pairs : ( 6, 4) ( 8, 2) have sum : 10 Pairs : ( 4, 8) ( 10, 2) have sum : 12 Pairs : ( 4, 10) ( 6, 8) ( 12, 2) have sum : 14 Pairs : ( 4, 12) ( 6, 10) have sum : 16 Pairs : ( 6, 12) ( 10, 8) have sum : 18 Pairs : ( 12, 11) ( 21, 2) have sum : 23 Pairs : ( 10, 22) ( 21, 11) have sum : 32 Pairs : ( 12, 21) ( 22, 11) have sum : 33 Pairs : ( 12, 22) ( 32, 2) have sum : 34 Pairs : ( 22, 21) ( 32, 11) have sum : 43 Pairs : ( 12, 32) ( 42, 2) have sum : 44 Pairs : ( 32, 21) ( 42, 11) have sum : 53 Pairs : ( 12, 42) ( 22, 32) have sum : 54 Pairs : ( 10, 54) ( 22, 42) have sum : 64

## Recommended Posts:

- Find two non-overlapping pairs having equal sum in an Array
- Count pairs in an array such that both elements has equal set bits
- Count of index pairs with equal elements in an array
- Given two unsorted arrays, find all pairs whose sum is x
- Print equal sum sets of array (Partition problem) | Set 1
- Print equal sum sets of array (Partition Problem) | Set 2
- Why is it faster to process sorted array than an unsorted array ?
- Given an array of pairs, find all symmetric pairs in it
- Count all distinct pairs with difference equal to k
- Count pairs from two sorted arrays whose sum is equal to a given value x
- Count pairs from two linked lists whose sum is equal to a given value
- Count pairs from two linked lists whose product is equal to a given value
- Program for Mean and median of an unsorted array
- Remove duplicates from unsorted array
- Find the two numbers with odd occurrences in an unsorted array

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.