Implementation of lower_bound and upper_bound on Set of Pairs in C++

22 Jul, 2020
Prerequisite: set lower_bound() function in C++ STL, set upper_bound() function in C++ STL
lower_bound() returns an iterator pointing to the first element in the range [first, last) which has a value greater than or equals to the given value “val”. But in set of Pairs lower_bound() for pair(x, y) will return an iterator pointing to the position of pair whose the first value is greater than or equals x.If first values are same, then it will return an iterator pointing to the position of pair whose the second value is greater than or equals y.If the above-mentioned criteria are not met, then it returns an iterator which points to end of the set (next to the last pair in set).
Syntax: There are two ways to use lower_bound():
setName.lower_bound({a, b})
lower_bound(setName.begin(), setName.end(), pair(a, b))
upper_bound() returns an iterator pointing to the first element in the range [first, last) which has a value greater than the given value “val”. But in set of Pairs upper_bound() for pair(x, y) will return an iterator pointing to the position of pair whose the first value is greater than x.If first values are same, then it will return an iterator pointing to the position of pair whose the second value is greater than y.If the above-mentioned criteria are not met, then it returns an iterator which points to end of the set (next to the last pair in set).
Syntax: There are two ways to use upper_bound() with Set:
setName.upper_bound({a, b})
upper_bound(setName.begin(), setName.end(), pair(a, b))
Below is the program to demonstrate lower_bound() and upper_bound() in set of pairs:
// C++ program to demonstrate lower_bound()// and upper_bound() in set of Pairs  #include <bits/stdc++.h>using namespace std;  // Function to implement lower_bound()void findLowerBound(    set<pair<int, int> >& arr,    pair<int, int>& p){      // Given iterator points to the    // lower_bound() of given pair    auto low = lower_bound(arr.begin(),                           arr.end(), p);      cout << "lower_bound() for {1, 2}"         << " is: {" << (*low).first << ", "         << (*low).second << "}" << endl;}  // Function to implement upper_bound()void findUpperBound(    set<pair<int, int> >& arr,    pair<int, int>& p){      // Given iterator points to the    // lower_bound() of given pair    auto up = upper_bound(arr.begin(),                          arr.end(), p);      cout << "upper_bound() for {1, 2}"         << " is: {" << (*up).first << ", "         << (*up).second << "}" << endl;}  // Driver Codeint main(){      // Given sorted vector of Pairs    set<pair<int, int> > s;      // Insert pairs in set    s.insert(make_pair(1, 2));    s.insert(make_pair(2, 4));    s.insert(make_pair(3, 7));    s.insert(make_pair(8, 9));      // Given pair { 1, 2 }    pair<int, int> p = { 1, 2 };      // Function Call to find lower_bound    // of pair p in arr    findLowerBound(s, p);      // Function Call to find upper_bound    // of pair p in arr    findUpperBound(s, p);      return 0;}
lower_bound() for {1, 2} is: {1, 2}
upper_bound() for {1, 2} is: {2, 4}

lakshaysood
cpp-pair
cpp-set
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Bitwise Operators in C/C++
vector erase() and clear() in C++
Inheritance in C++
Priority Queue in C++ Standard Template Library (STL)
The C++ Standard Template Library (STL)
Substring in C++
Object Oriented Programming in C++
C++ Classes and Objects
Sorting a vector in C++
2D Vector In C++ With User Defined Size