Я пытаюсь изучить библиотеки boost :: bind, boost :: lambda и то, как их можно использовать с алгоритмами STL. Предположим, у меня есть вектор пар int-string, который отсортирован по ключу int. Тогда место для вставки новой пары, сохраняя вектор отсортированным, можно найти следующим образом:
std::vector<std::pair<int, string> > entries;
...
int k = ...;
// Let's ignore std::lower_bound return value for now
std::lower_bound (entries.begin(), entries.end(), k,
boost::bind (&std::pair<int, string>::first, _1) < k)
Теперь я хотел бы заменить operator<
на объект функции (типа std::less<int>
в этом примере):
std::less<int> comparator;
Как мне изменить приведенный выше код, чтобы он работал? Я не могу просто сделать
std::lower_bound (entries.begin(), entries.end(), k,
comparator (boost::bind (&std::pair<int, string>::first, _1), k))
потому что std::less<int>::operator()
не принимает то, что является возвращаемым типом boost::bind
. Что мне здесь не хватает? TIA