Home > other >  Which one of them is the faster?
Which one of them is the faster?

Time:12-06

first sorry for my poor English.

I want to know Which one of them is the faster

set_name.lower_bound(key) ; 

or

lower_bound(set_name.begin() , set_name.end() , value)

I try to know which one of them is the faster.

CodePudding user response:

If in doubt you should perform an analysis of the runtime. However, assuming your set_name variable has type std::set<T> for some T, std::lower_bound is most likely going to lose against std::set<T>::lower_bound.

Why? The latter can use the underlying structure of the rb-tree while the former cannot. In particular, std::lower_bound uses something akin to std::advance. For data structures like an std::vector advance is a constant-time operation (more specifically: a pointer-integer addition). However, for something like an std::set<T>, advance is linear in time, with some hefty pointer indirection and likely repeated cache misses, making it extremely slow to run repeatedly on large containers.

So, if you have a set-like structure, use the lower_bound member structure as it is specifically optimised for that data structure.

  • Related