帮助理解boost :: bind占位符参数

问题描述:

我正在阅读一篇*文章,内容是按照对的第二个元素对一个对的向量进行排序。最明显的答案是创建一个谓词,但是使用boost的一个答案引起了我的注意。帮助理解boost :: bind占位符参数

std::sort(a.begin(), a.end(), 
    boost::bind(&std::pair<int, int>::second, _1) < 
    boost::bind(&std::pair<int, int>::second, _2)); 

我一直在试图找出如何提高::绑定工作,或者至少是如何使用它,但我想不出什么的占位符参数的目的_1和_2是,并且增强文档根本不会沉入其中。

任何人都可以解释这个具体的使用boost :: bind?

P.S.原始问题:How do I sort a vector of pairs based on the second element of the pair?

该表达式:

boost::bind(&std::pair<int, int>::second, _1) < 
boost::bind(&std::pair<int, int>::second, _2) 

即,使用<操作者的实际定义另外两个函子,这两者通过bind定义之间的算符。

通过某种预期的仿函数需要有一个operator(),看起来像这样:

bool operator()(const T& arg1, const T& arg2); 
当你使用升压转换器的 <那么域名持有者 _1_2创造一个仿函数

对应arg1和的arg2你正在创建的函子。

bind调用创建一个调用的arg1::secondarg2

运气好的话算符,C++ 0x中引入lambda表达式会作出这样过时的表达式。

+0

备案:'typedef std :: pair pair_type; std :: sort(a.begin(),a.end(),[](pair_type x,pair_type y){return x.second GManNickG 2010-01-23 03:44:31

std :: sort需要一个二元谓词来比较范围中的两个项目。占位符显示将使用第一个和第二个参数的位置。

boost :: bind使整个表达式读取为_1.second < _2.second(除了因为。操作符不可重载,所以无法实现这种表达)。

这两个绑定调用,在这种情况下,创建一个函数对象,接受pair<int, int>并返回值secondoperator<又被重载以返回比较先前仿函数结果的另一个二元仿函数。这被std::sort使用。