2014-03-28 82 views
0

我有一個映射,它具有指向對象的指針作爲鍵(值爲int)。鑑於此,我想創建一個地圖,等同於原始地圖,但我想的鑰匙,是相應的對象(也稱非關聯鍵)將指針映射轉換爲對象映射

這裏是我的代碼:

map<const Point*, int> m1 = createMap(); 
map<Point,int> temp; 
for_each(q.begin(), q.end(), [&temp](pair<const Point*, int> p){temp.insert(make_pair(*(p.first),p.second));}); 

我試圖做的就是調用一個簡單的去掉初始映射關鍵字的lambda表達式。

然而編譯器卻抱怨說「/usr/include/c++/4.8/bits/stl_function.h|235|error:'operator <'(操作數類型是'const Point'和'const Point')不匹配。 |」

我在某個地方犯了一個愚蠢的錯誤嗎?

+1

貴Point結構定義了 「<」 操作符?編譯器知道如何比較指針,但它不知道如何比較兩個用戶定義的結構體或類,如果你沒有爲其定義一個運算符 – Gonmator

+0

注意:地圖不會是「相同的」:(1)最終的地圖可能會有不同的順序。 (2)由此產生的地圖可能有更少的元素(可能有兩個指向同一點的地圖) –

+0

嗯。有沒有辦法避免(2)的情況?大圖是我的算法(函數)返回第一張地圖。爲了測試它的輸出,雖然我需要一個對象的映射(而不是指針)。 –

回答

0

你必須定義運營商<爲你的類點。

地圖是元素的有序集合。因此你需要實現一個函數來訂購它們。默認情況下,該函數是運算符<,但是如果需要,您可以在構造函數中指定一個不同的函數。

硒這裏,例如:

http://www.cplusplus.com/reference/map/map/

+0

哎呀!我忘記了地圖鍵是排序的容器。 C++新手。謝謝。 –

+0

你知道該怎麼做嗎? – DrD

+0

是的,我做到了。有效。 –