13.7.1  证和映射

13.7.1 证和映射

基本的“证”仿函数是identity,其他均为一般化形式。C++标准没有涵盖identity和映射两种操作行为,但由于它们使用得非常普遍,多数C++版本中添加了它们的定义。

1.仿函数identity

978-7-111-51399-5-Chapter13-66.jpg

类identity是一种一元仿函数,用于表示“证”仿函数,使用时需要一个参数,返回的是未经任何变化的原参数。

例13-18

978-7-111-51399-5-Chapter13-67.jpg

例13-18的执行结果为:

978-7-111-51399-5-Chapter13-68.jpg

提示

在Visual Studio 2008环境下,为确保程序能够顺利通过,需要将头文件<yvals.h>中的宏_HAS_TRADITIONAL_STL的值修改为1,编译程序才能顺利通过。13.7节和13.8节中的内容均做相同处理。

2.仿函数project1st和project2nd

仿函数project1st的声明形式为:

978-7-111-51399-5-Chapter13-69.jpg

仿函数project2nd的声明形式为:

978-7-111-51399-5-Chapter13-70.jpg

这两个仿函数均接受两个参数。project1st返回第一个参数并忽略第二参数;project2nd返回第二个参数并忽略第一个参数。这两个仿函数的基类均为binary_function<Arg1,Arg2,Arg2>。这两个仿函数类均包括5个成员函数:

978-7-111-51399-5-Chapter13-71.jpg

在使用上述两个仿函数时,需要包含头文件<functional>。

例13-19

978-7-111-51399-5-Chapter13-72.jpg

978-7-111-51399-5-Chapter13-73.jpg

例13-19的执行结果为:

978-7-111-51399-5-Chapter13-74.jpg

3.仿函数select1st和select2nd

仿函数select1st<pair>和select2nd<pair>可以接受单一参数,参数是pair类型。仿函数select1st返回该pair的第一个元素;仿函数select2nd返回该pair的第二个元素。这两个仿函数也定义于头文件<functional>中。这两个仿函数的基类是:unary_function<pair,typename pair::first_type>

这两个仿函数类均包括4个成员函数:

•argument_type

•result_type

•const typename pair::first_type&select1st::operator()(const pair&p)const

•select1st()/select2nd()

例13-20

978-7-111-51399-5-Chapter13-75.jpg

例13-20的执行结果为:

抽取键值:1 33 47

抽取实值:0.3 0.1 0.8