帮助理解boost :: bind占位符参数
问题描述:
我正在阅读一篇StackOverFlow文章,内容是按照对的第二个元素对一个对的向量进行排序。最明显的答案是创建一个谓词,但是使用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
::second
和arg2
运气好的话算符,C++ 0x中引入lambda表达式会作出这样过时的表达式。
答
std :: sort需要一个二元谓词来比较范围中的两个项目。占位符显示将使用第一个和第二个参数的位置。
boost :: bind使整个表达式读取为_1.second < _2.second
(除了因为。操作符不可重载,所以无法实现这种表达)。
这两个绑定调用,在这种情况下,创建一个函数对象,接受pair<int, int>
并返回值second
。 operator<
又被重载以返回比较先前仿函数结果的另一个二元仿函数。这被std::sort
使用。
备案:'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