構造体をキーとして使用して、hash_map でいくつかのテストを行います。私は構造体を定義します:
struct ST
{
bool operator<(const ST &rfs)
{
return this->sk < rfs.sk;
}
int sk;
};
と:
size_t hash_value(const ST& _Keyval)
{ // hash _Keyval to size_t value one-to-one
return ((size_t)_Keyval.sk ^ _HASH_SEED);
}
それから:
stdext::hash_map<ST, int> map;
ST st;
map.insert(std::make_pair<ST, int>(st, 3));
それは私にコンパイラエラーを与えます:binary '<' : no operator found which takes a left-hand operand of type 'const ST' (または許容できる変換がありません)
したがって、演算子を非メンバーに変更します。
bool operator<(const ST& lfs, const ST& rfs)
{
return lfs.sk < rfs.sk;
}
大丈夫です。では、理由を知りたいですか?