#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"; }

}
