#include #include #include int main(int,char**) { typedef std::map map_t; map_t m; for (int i=0 ; i<16 ; i++) m[i]= i; for (int i=16 ; i<20 ; i++) m[i]= 0xFFFFFFFF; auto iu= std::upper_bound(m.begin(), m.end(), map_t::value_type(0,0xFFFFFFFF), [](const map_t::value_type&lhs, const map_t::value_type&rhs)->bool { return lhs.secondbool { return lhs.secondfirst, il==m.end() ? -1 : il->first); return 0; }