Looks like you are trying to do something slightly different from lowerbound which finds the first element greater or equal. the only algorithm that could do this would be foreach which is essentially a while loop under the covers. You'd have to define a functor with for_each that stores the iterator to the item that you are looking for and returns. I don't think that there is any algorithm that could do this logarithmically as lower_bound would.
Actually wait. Why not just use the lower_bound member function? Then you can simply backup by one after it finishes or check if it is at the beginning? I guess it depends on the complexity of the container. If it is huge, you can use lower bound and then check if the iterator needs to be backed up by one. If it is small then you might be better off with a linear find that iterates from the beginning.