標準の関数オブジェクト

http://www.geocities.jp/ky_webid/cpp/library/024.html

functionalヘッダというものに標準的な関数オブジェクトが定義されています。

以下にそのリストを上げてみます。

ちなみに関数オブジェクトの引数に渡される変数名をparam1とparam2だと仮定します。

関数オブジェクト名 処理内容
plus param1 + param2
minus param1 - param2
multiplies param1 * param2
divides param1 / param2
modules param1 % param2
nagate -param1
equal_to param1 == param2
not_equal_to param1 != param2
less param1 < param2
greater param1 > param2
less_equal param1 <= param2
greater_equal param1 >= param2
logical_and param1 && param2
logical_or param1 || param2
logical_not !param1


さてここで一つ種明かしがありました。

greaterはどこかで見たことがありますよね。

そうです。ソートの条件を降順にする際に使っていました。ここでようやく意味がわかりましたね。

// 降順でソートする
data.sort( greater<int>() );

この処理はつまり、greaterクラスのRVO渡しということになります。

デフォルトではlessクラスが適用されていたということなんですね。なるほど合点です。