2013-10-09 53 views
2

我偶然發現了一個我無法解決的地圖問題。我們知道,地圖需要兩種類型的變量來處理地圖,但自定義類型又如何呢?自定義類型內部映射參數

假設我有一個名爲'Point'的對象,它包含兩個變量x和y。宣佈一個地圖如:map?可行嗎?請看下面的代碼

class Point 
{ 
public: 
double x; 
double y; 
Point(double x, double y) 
{ 
    this->x=x; 
    this->y=y; 
} 
}; 

int main(int argc, const char * argv[]) 
{ 
     map<Point,int> myMap; 
     Point p1(0,0); 
     myMap[p1]=1; 
} 

我收到一個編譯錯誤:「無效的操作數的二進制表示(」常量點」和‘常量點’)。

有誰知道爲什麼會發生這種情況,我該如何解決它?任何幫助將非常感激 :)。

乾杯!

回答

2

您需要爲Point提供operator<。 std :: map內部調用operator<來對鍵進行排序。

bool operator<(const Point& lhs, const Point& rhs) 
{ 
    // compares lhs.x to rhs.x, 
    // then lhs.y to rhs.y 
    return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y); 
} 

map,它從模板參數Compare功能,std::less<key>是默認值。

std::map是一個排序的關聯容器,包含具有唯一鍵的鍵值對。 按鍵使用比較功能Compare排序。搜索,刪除和插入操作具有對數複雜性。地圖通常以紅黑樹的形式實現