2

我正在尝试精简 boost::bind、boost::lambda 库以及它们如何与 STL 算法一起使用。假设我有按 int 键排序的 int-string 对向量。然后可以找到在保持向量排序的同时插入新对的位置,如下所示:

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

4

1 回答 1

3

您所缺少的只是另一个bind(以及 上的模板参数pair):

std::lower_bound(entries.begin(), entries.end(), k, 
                 boost::bind(comparator,
                             boost::bind(&std::pair<int, string>::first, _1),
                             k))

您不必对原始代码中的小于运算符执行此操作,因为 Boost.Bind 为知道如何处理boost::bind.

于 2009-11-25T06:32:25.827 回答