2016-07-29 41 views
-4

我有以下結構定義問題地圖

struct WayStruct{ 
    double ID; 
    string Neighbours; 
}; 

,並在地圖下面

map <double,WayStruct> WayMap; 

要將新元素添加到這個地圖我用

WaysFind.ID=999; 
WaysFind.Neighbours="test"; 
WayMap.insert(1234,WaysFind); 

但是我做不到得到這個編譯。 Dev-C++結尾出錯

[Error] no matching function for call to 'std::map<double, WayStruct>::insert(double, WayStruct&)' 

有人可以告訴我在做什麼錯嗎?

當我使用make_pair開發-C++文件stl_pair.h返回與

In instantiation of 'std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = double; _U2 = int; _T1 = const char; _T2 = WayStruct]': 
    required from here 
111 39 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.7.1\include\c++\bits\stl_pair.h [Error] no matching function for call to 'WayStruct::WayStruct(const int&)' 

+2

您是否嘗試閱讀文檔? – Slava

+0

嗨,斯拉瓦,是的,我有。我一直在掃描網絡退出一段時間 – HB1963

+0

「std :: map」沒有'insert(key,value)'方法,所以我也可能抱怨編譯器。 – WhozCraig

回答

1

你必須使用方法如下:

WayMap.insert(std::pair<double,WayStruct>(1234,WaysFind)); 

演示:http://coliru.stacked-crooked.com/a/df5e4413eceb68be

如果你有C++ 11或更高版本的兼容編譯器,這也將工作:

WayMap.insert(std::make_pair(1234,WaysFind)); 
+0

'make_pair'可用在C++之前11 – Slava

+0

我也嘗試了make_pair,但Dev-C++開始在頭文件stl_pair.h中抱怨。 我將編輯我的問題與錯誤消息 – HB1963

5

std::map::insert()超載,你要使用接受std::map:value_type類型,是不是std::pair兩個一個參數。插入值,以地圖,常用的方法是:

WayMap.insert(std::make_pair(1234,WaysFind)); 

爲C++ 11,你可以插入你嘗試使用emplace替代方式:

WayMap.emplace(1234, WaysFind); 

在側面說明,你應該使用提防可能出現的問題double作爲一個關鍵。

+0

我設法得到它解決。一個問題,但。使用double作爲key時可能引發什麼問題? – HB1963

+0

@ HB1963閱讀本文https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ – Slava

+0

@ HB1963另外這個SO主題可以幫助http:// stackoverflow。 COM /問題/ 24937085 /可靠,使用兩雙-AS-stdmap密鑰 – Slava