#include <vector>
#include <iostream>
#include <algorithm>
struct Foo {
int id;
// ... more members ... //
Foo(int id) : id(id) {std::cout << "created " << id << "\n";}
};
bool sortById(const Foo& a,const Foo& b) { return a.id < b.id; }
bool compareToId(const Foo& a,const int& b) { return a.id < b; }
int main(int argc, char *argv[])
{
std::vector<Foo> vect;
vect.push_back(10);
vect.push_back(123);
vect.push_back(0);
vect.push_back(1);
std::sort(vect.begin(),vect.end(),sortById);
int id_to_find = 42;
std::vector<Foo>::iterator f = std::lower_bound(vect.begin(),vect.end(),id_to_find,compareToId);
if (f != vect.end() && f->id == id_to_find) { std::cout << "FOUND"; }
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IEZvbyB7CiAgICBpbnQgaWQ7CiAgICAvLyAuLi4gbW9yZSBtZW1iZXJzIC4uLiAvLwogICAgRm9vKGludCBpZCkgOiBpZChpZCkge3N0ZDo6Y291dCA8PCAiY3JlYXRlZCAiIDw8IGlkIDw8ICJcbiI7fQp9OwoKYm9vbCBzb3J0QnlJZChjb25zdCBGb28mIGEsY29uc3QgRm9vJiBiKSB7IHJldHVybiBhLmlkIDwgYi5pZDsgfQpib29sIGNvbXBhcmVUb0lkKGNvbnN0IEZvbyYgYSxjb25zdCBpbnQmIGIpIHsgcmV0dXJuIGEuaWQgPCBiOyB9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgICBzdGQ6OnZlY3RvcjxGb28+IHZlY3Q7CiAgICB2ZWN0LnB1c2hfYmFjaygxMCk7CiAgICB2ZWN0LnB1c2hfYmFjaygxMjMpOwogICAgdmVjdC5wdXNoX2JhY2soMCk7CiAgICB2ZWN0LnB1c2hfYmFjaygxKTsKICAgIHN0ZDo6c29ydCh2ZWN0LmJlZ2luKCksdmVjdC5lbmQoKSxzb3J0QnlJZCk7CiAgICBpbnQgaWRfdG9fZmluZCA9IDQyOwogICAgc3RkOjp2ZWN0b3I8Rm9vPjo6aXRlcmF0b3IgZiA9IHN0ZDo6bG93ZXJfYm91bmQodmVjdC5iZWdpbigpLHZlY3QuZW5kKCksaWRfdG9fZmluZCxjb21wYXJlVG9JZCk7CiAgICBpZiAoZiAhPSB2ZWN0LmVuZCgpICYmIGYtPmlkID09IGlkX3RvX2ZpbmQpIHsgc3RkOjpjb3V0IDw8ICJGT1VORCI7IH0KCn0K