0

構造体をキーとして使用して、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;
}

大丈夫です。では、理由を知りたいですか?

4

3 に答える 3