このコードは、g++4.4および'-std= c++0x'で正常にコンパイルされます。
#include <unordered_set>
namespace
{
size_t IntHash ( int i )
{
return i;
}
bool IntComp ( int i, int j )
{
return i == j;
}
}
int main ( int argc, char* argv[] )
{
typedef std::pointer_to_unary_function<int, size_t> CustomHash;
typedef std::pointer_to_binary_function<int, int, bool>
CustomComp;
typedef std::unordered_set<int, CustomHash, CustomComp> DeprecatedSet;
DeprecatedSet deprecatedSet ( 10, std::ptr_fun ( IntHash ), std::ptr_fun ( IntComp ) );
deprecatedSet.insert ( 5 );
deprecatedSet.insert ( 10 );
}
ただし、非推奨のstd::pointer_to_unary_functionとstd::ptr_funを使用したくなかったが、それでも無料の関数を使用するとします。
#include <unordered_set>
#include <functional>
namespace
{
size_t IntHash ( int i )
{
return i;
}
bool IntComp ( int i, int j )
{
return i == j;
}
}
int main ( int argc, char* argv[] )
{
typedef std::unordered_set<int /*, UserDefinedHash?, UserDefinedComparison? */> NewSet;
NewSet newSet (
10,
std::bind ( IntHash, std::placeholders::_1 ),
std::bind ( IntComp, std::placeholders::_1, std::placeholders::_2 ) );
newSet.insert ( 5 );
newSet.insert ( 10 );
}
UserDefinedHashとUserDefinedComparisonに何を入力すればよいかわからないため、これはコンパイルされません。
std :: bindには、バインドオブジェクト自体のタイプを定義するメンバータイプがあるようには見えません。
カスタムハッシュ関数と比較を定義する他の方法があることを私は知っています。非推奨の標準ライブラリタイプと関数なしでフリー/クラス関数を使用できるかどうかだけ興味があります。