代码之家  ›  专栏  ›  技术社区  ›  Laurynas Biveinis

C++:如何使用STD::较少的INT>与Booo::绑定和Booost::lambda?

  •  2
  • Laurynas Biveinis  · 技术社区  · 15 年前

    我正在尝试精简boost::bind、boost::lambda库,以及如何将它们与STL算法一起使用。假设我有int字符串对的向量,它是按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 . 我这里缺什么?蒂亚

    1 回复  |  直到 15 年前
        1
  •  3
  •   Rob Kennedy    15 年前

    你所缺少的只是另一个 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 .