2016-07-29 86 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