// C++ program to demonstrate lower_bound()
// and upper_bound() in Map of Pairs
#include <bits/stdc++.h>
using namespace std;
// Function to implement lower_bound()
void findLowerBound(
map<pair<int, int>, int>& mp,
pair<int, int>& p)
{
// This iterator points to the
// lower_bound() of given pair
auto low = mp.lower_bound(p);
cout << "lower_bound() for {2, 5}"
<< " is: {"
<< (*low).first.first << ", "
<< (*low).first.second
<< "}" << endl;
}
// Function to implement upper_bound()
void findUpperBound(
map<pair<int, int>, int>& mp,
pair<int, int>& p)
{
// This iterator points to the
// upper_bound() of given pair
auto up = mp.upper_bound(p);
cout << "upper_bound() for {2, 5}"
<< " is: {"
<< (*up).first.first << ", "
<< (*up).first.second
<< "}" << endl;
}
// Driver Code
int main()
{
// Declare map of Pairs
map<pair<int, int>, int> mp;
// Insert Pairs in Map
mp.insert({ { 2, 3 }, 8 });
mp.insert({ { 4, 1 }, 5 });
mp.insert({ { 7, 1 }, 3 });
mp.insert({ { 9, 3 }, 1 });
mp.insert({ { 5, 0 }, 3 });
// Given pair {2, 5}
pair<int, int> p = { 2, 5 };
// Function Call to find lower_bound
// of pair p in map mp
findLowerBound(mp, p);
// Function Call to find upper_bound
// of pair p in map mp
findUpperBound(mp, p);
return 0;
}