#include <iostream> // std::cout
#include <algorithm> // std::lower_bound, std::upper_bound, std::sort
#include <vector> // std::vector
template<class ForwardIt, class T>
T upperBoundIndex(ForwardIt first, ForwardIt last, const T& value)
{
return (std::upper_bound (first, last, value) - first);
}
int main () {
int myints[] = {10,20,30,30,20,10,10,20};
std::vector<int> v(myints,myints+8); // 10 20 30 30 20 10 10 20
std::sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30
std::vector<int>::iterator low,up;
low=std::lower_bound (v.begin(), v.end(), 20); // ^
up= std::upper_bound (v.begin(), v.end(), 20); // ^
std::cout << "lower_bound at position " << (low- v.begin()) << '\n';
std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
std::cout << "Using upperBoundIndex() : " << upperBoundIndex(v.begin(), v.end(), 20);
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgLy8gc3RkOjpjb3V0CiNpbmNsdWRlIDxhbGdvcml0aG0+ICAgIC8vIHN0ZDo6bG93ZXJfYm91bmQsIHN0ZDo6dXBwZXJfYm91bmQsIHN0ZDo6c29ydAojaW5jbHVkZSA8dmVjdG9yPiAgICAgICAvLyBzdGQ6OnZlY3RvcgoKdGVtcGxhdGU8Y2xhc3MgRm9yd2FyZEl0LCBjbGFzcyBUPgpUIHVwcGVyQm91bmRJbmRleChGb3J3YXJkSXQgZmlyc3QsIEZvcndhcmRJdCBsYXN0LCBjb25zdCBUJiB2YWx1ZSkKewoJcmV0dXJuIChzdGQ6OnVwcGVyX2JvdW5kIChmaXJzdCwgbGFzdCwgdmFsdWUpIC0gZmlyc3QpOwp9CgppbnQgbWFpbiAoKSB7CiAgaW50IG15aW50c1tdID0gezEwLDIwLDMwLDMwLDIwLDEwLDEwLDIwfTsKICBzdGQ6OnZlY3RvcjxpbnQ+IHYobXlpbnRzLG15aW50cys4KTsgICAgICAgICAgIC8vIDEwIDIwIDMwIDMwIDIwIDEwIDEwIDIwCgogIHN0ZDo6c29ydCAodi5iZWdpbigpLCB2LmVuZCgpKTsgICAgICAgICAgICAgICAgLy8gMTAgMTAgMTAgMjAgMjAgMjAgMzAgMzAKCiAgc3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgbG93LHVwOwogIGxvdz1zdGQ6Omxvd2VyX2JvdW5kICh2LmJlZ2luKCksIHYuZW5kKCksIDIwKTsgLy8gICAgICAgICAgXgogIHVwPSBzdGQ6OnVwcGVyX2JvdW5kICh2LmJlZ2luKCksIHYuZW5kKCksIDIwKTsgLy8gICAgICAgICAgICAgICAgICAgXgoKICBzdGQ6OmNvdXQgPDwgImxvd2VyX2JvdW5kIGF0IHBvc2l0aW9uICIgPDwgKGxvdy0gdi5iZWdpbigpKSA8PCAnXG4nOwogIHN0ZDo6Y291dCA8PCAidXBwZXJfYm91bmQgYXQgcG9zaXRpb24gIiA8PCAodXAgLSB2LmJlZ2luKCkpIDw8ICdcbic7CgogIHN0ZDo6Y291dCA8PCAiVXNpbmcgdXBwZXJCb3VuZEluZGV4KCkgOiAgIiA8PCB1cHBlckJvdW5kSW5kZXgodi5iZWdpbigpLCB2LmVuZCgpLCAyMCk7Cn0K