C++STL の std::set に関数オブジェクトを渡す2021年04月21日 11時57分59秒

std::set に演算子実装のクラスを渡し、任意の比較を行った。前回はそのクラスの大きさが気になったのが実験の動機。今回は関数オブジェクトを渡す。

関数オブジェクトをコンテナに渡す時の宣言をいつも忘れる。テンプレート引数の所に、比較式を書けば良いだけだ。

#include <set>
#include <iostream>

int main()
{
    bool ( *f )( int, int ) = []( int l, int r ){ return l > r; };
    std::set< int, bool (*)( int, int ) > desc( f );

    std::cout << "desc sizeof " << sizeof( desc.value_comp() ) <&
lt; std::endl;
    std::cout << "desc compare " << desc.value_comp()( 1, 2 ) <&l
t; std::endl;
}
関数オブジェクトの大きさはポインタの大きさだった。
% c++ value_comp2.cpp
% ./a.out 
desc sizeof 4
desc compare 0

前回次回