我對hash_map做了一些測試,使用struct作爲鍵。我定義的結構:爲什麼運營商<被定義爲非會員?
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 operator()(const _Ty&_Left,const _Ty&_Right)const'。當然,我想念常客。 – 2013-05-13 03:50:00
@MIKU_LINK:是的,這對於能夠在const ST對象上調用操作符是必需的。 – 2013-05-13 03:59:02
謝謝! @Jesse好 – 2013-05-13 04:13:55