2011-10-18 103 views
-1

我試圖訪問值從鑰匙在一個std:地圖在C++訪問C++地圖

假設aObject有效 MYMAP有多個值。

map<myObject,int> mymap; 
myObject aObject; 
int value = mymap[aObject]; 

是否必須重新定義operator == for myObject?

如果我不重新定義它會發生什麼?

回答

3

std::map要求您重載operator<作爲鍵類型,或者提供一個比較器。兩者都必須實施嚴格的弱排序。如果你不提供,你的程序將不會編譯。如果你不正確地實現它們(即不是一個嚴格的弱排序),你會得到垃圾結果(我實際上不知道這是否是嚴格意義上的未定義行爲)。

+0

arrgh - 再次擊敗我.. :) – Nim

+0

@Nim:我今天着火:) –

+2

...或專門針對鍵類型的「std :: less」。 –