В связи с чем обидно, что у C++ных std::sort, std::min_element это указать невозможно, в коде callback нужно указывать в два раза больше чем хочется.
Кстати, в C++ появились лямбда функции, их уже можно использовать в gcc4.что.то.там и Visual C++ 2010.
Теперь что бы найти в массиве наиболее близкий к val можно писать
int *a_min = std::min_element(a_begin, a_end, [=](int x, int y) { return abs(x-val) < abs(y-val); }); |
Можно в вашу
int *a_min = my::min_by_key(array, [=](int x) { return abs(x-val); }); |
Раньше, что бы воспользоваться уже написаным std::min_element, приходилось писать мего-функтор где-то на страницу кода выше, за пределом экрана. Про boost::* молчу. Это приводило к тому, что рукописный цикл был и читаемей, и проще писался. Единственный алгоритм который сцали писать с нуля - это std::sort. Теперь же можно писать просто и наглядно, при code-review не нужно анализировать, сделали ли типичную опечатку в коде поиска минимума, что будет если список пустой.
Вы всё ещё пишете цикл нахождения минимального элемента каждый раз руками в цикле? Лямбда-функции и утилитные алгоритмы уберут циклы и опечатки в циклах, и сделают из пяти строк - одну!
upd: поторопился, сейчас распространён gcc4.4, а лямбды сделали в gcc4.5, который вот-вот будет в дефолтных дистрибутивах. Надо перепостить это через полгодика :)