C++ コンテナの value_comp の大きさが std::set に追加される ― 2021年04月18日 18時31分17秒
この、比較演算子は value_comp() 関数で取得できる。特に、クラスを比較のために渡すと、そのままインスタンスが生成されるようだ。
これを実行すると greater の大きさが 1024 で、std::set の大きさが 1036 となっている。なお、この実験は clang を使っている。
#include <set>
#include <iostream>
struct greater
{
char gap[ 1024 ];
bool operator()( int l, int r ) const { return l > r; }
};
int main()
{
std::set< int > asc;
std::set< int, greater > desc;
std::cout << "asc sizeof " << sizeof( asc.value_comp() ) << std::endl;
std::cout << "asc compare " << asc.value_comp()( 1, 2 ) << std::endl;
std::cout << "desc sizeof " << sizeof( desc.value_comp() ) << std::endl;
std::cout << "desc compare " << desc.value_comp()( 1, 2 ) << std::endl;
std::cout << "sizeof " << sizeof( desc ) << std::endl;
}
二つの value_comp() に同じ値を渡すと、返って来る値が違うのが見て取れる。
% c++ value_comp.cpp
% ./a.out
asc sizeof 1
asc compare 1
desc sizeof 1024
desc compare 0
sizeof 1036
次回。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/04/18/9368538/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。