Я делаю некоторый тест на hash_map, используя struct as key. Я определяю-структуру:Почему оператор <определяется как не являющийся членом?
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));
Это дает мне ошибку компилятора: двоичную '<': ни один оператор не найден, который занимает левую руку операнд типа «const ST» (или нет приемлемого преобразования)
Итак, я меняю оператор t o не является членом:
bool operator<(const ST& lfs, const ST& rfs)
{
return lfs.sk < rfs.sk;
}
Это нормально. Так что я хочу знать, почему?
Да, я проверяю место, где выдается ошибка. Оператор bool() (const _Ty & _Left, const _Ty & _Right) const '. Конечно, я скучаю по созвездию. –
@MIKU_LINK: Да, это необходимо для вызова оператора на объект 'const ST'. –
Спасибо! @Jesse Хорошо –