#include <iostream>
#include <unordered_map>
// Function to find a pair in an array with given sum using Hashing
void findPair(int arr[], int n, int sum)
{
// create an empty map
std::unordered_map<int, int> map;
// do for each element
for (int i = 0; i < n; i++)
{
// check if pair (arr[i], sum-arr[i]) exists
// if difference is seen before, print the pair
if (map.find(sum - arr[i]) != map.end())
{
std::cout << "Pair found at index " << map[sum - arr[i]] <<
" and " << i;
return;
}
// store index of current element in the map
map[arr[i]] = i;
}
// we reach here if pair is not found
std::cout << "Pair not found";
}
// Find pair with given sum in the array
int main()
{
int arr[] = { 1, 1, 2, 2, 1, 2, 2};
int sum = 2;
int n = sizeof(arr)/sizeof(arr[0]);
findPair(arr, n, sum);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCi8vIEZ1bmN0aW9uIHRvIGZpbmQgYSBwYWlyIGluIGFuIGFycmF5IHdpdGggZ2l2ZW4gc3VtIHVzaW5nIEhhc2hpbmcKdm9pZCBmaW5kUGFpcihpbnQgYXJyW10sIGludCBuLCBpbnQgc3VtKQp7CgkvLyBjcmVhdGUgYW4gZW1wdHkgbWFwCglzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IG1hcDsKCgkvLyBkbyBmb3IgZWFjaCBlbGVtZW50Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQkvLyBjaGVjayBpZiBwYWlyIChhcnJbaV0sIHN1bS1hcnJbaV0pIGV4aXN0cwoKCQkvLyBpZiBkaWZmZXJlbmNlIGlzIHNlZW4gYmVmb3JlLCBwcmludCB0aGUgcGFpcgoJCWlmIChtYXAuZmluZChzdW0gLSBhcnJbaV0pICE9IG1hcC5lbmQoKSkKCQl7CgkJCXN0ZDo6Y291dCA8PCAiUGFpciBmb3VuZCBhdCBpbmRleCAiIDw8IG1hcFtzdW0gLSBhcnJbaV1dIDw8IAoJCQkJCQkgIiBhbmQgIiA8PCBpOwoJCQlyZXR1cm47CgkJfQoKCQkvLyBzdG9yZSBpbmRleCBvZiBjdXJyZW50IGVsZW1lbnQgaW4gdGhlIG1hcAoJCW1hcFthcnJbaV1dID0gaTsKCX0KCgkvLyB3ZSByZWFjaCBoZXJlIGlmIHBhaXIgaXMgbm90IGZvdW5kCglzdGQ6OmNvdXQgPDwgIlBhaXIgbm90IGZvdW5kIjsKfQoKLy8gRmluZCBwYWlyIHdpdGggZ2l2ZW4gc3VtIGluIHRoZSBhcnJheQppbnQgbWFpbigpCnsKCWludCBhcnJbXSA9IHsgMSwgMSwgMiwgMiwgMSwgMiwgMn07CglpbnQgc3VtID0gMjsKCglpbnQgbiA9IHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pOwoKCWZpbmRQYWlyKGFyciwgbiwgc3VtKTsKCglyZXR1cm4gMDsKfQ==