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

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

例13-18的执行结果为:

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

仿函数project2nd的声明形式为:

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

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


例13-19的执行结果为:

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

例13-20的执行结果为:
抽取键值:1 33 47
抽取实值:0.3 0.1 0.8