Manière élégante pour trouver la valeur la plus proche dans un vecteur d'en haut

J'ai besoin d'une fonction qui prend un vecteur (supposé être triés), et une valeur, et retourne le nombre le plus proche c'est [edit] supérieur inférieur ou égal à ce nombre, de préférence à l'aide d'un algorithme à partir de la STL. J'ai trouvé une solution en utilisant std::lower_bound(), mais il semble encombrants et vilaine:

struct ClosestCmp {
    bool operator()(const int & x, const int & y) { return x > y; }
};

//vec is assumed to be sorted
int closest(const std::vector<int> & vec, int value)
{
    std::vector<int>::const_reverse_iterator cri =
        std::lower_bound(vec.rbegin(), vec.rend(), value, ClosestCmp());
    if (cri != vec.rend()) {
        return *cri;
    }
    return -1;
}

//...
vec.push_back(1);
vec.push_back(2);
vec.push_back(4);
vec.push_back(5);
std::cout << closest(vec, 2) << "\n"; //Should ouput "2"
std::cout << closest(vec, 3) << "\n"; //Should ouput "2"
std::cout << closest(vec, 4) << "\n"; //Should ouput "4"

Quelqu'un peut-il suggérer une façon plus élégante, peut-être l'aide d'un STL algorithme sans avoir besoin d'une fonction de comparaison ou un itérateur inverse? J'ai regardé dans la STL, mais je n'ai pas été en mesure de trouver une meilleure solution que ce.

source d'informationauteur josmith42