【问题标题】:Issues with map地图问题
【发布时间】:2016-07-29 17:33:35
【问题描述】:

我确实定义了以下结构

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 Dev-C++ 返回时

   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&)' 

在文件 stl_pair.h 中

【问题讨论】:

  • 你试过阅读文档吗?
  • 嗨 Slava,是的,我有。我已经在网上扫描了一段时间了
  • 没有std::mapinsert(key, value) 方法,所以我是编译器,我可能也会抱怨。
  • @HB1963 在该链接的哪个位置显示(key, value)
  • @HB1963 是的,我确定。首先,我知道insert 对于std::map 的所有重载。其次,如果有这样的超载,你现在不会在这里

标签: c++ c++11 dictionary


【解决方案1】:

您尝试使用的std::map::insert() 重载接受一个std::map:value_type 类型的参数,即std::pair 而不是两个。向地图插入值的常见方法是:

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

对于 C++11,您可以插入您尝试使用 emplace 的方式:

WayMap.emplace( 1234, WaysFind );

附带说明,您应该注意使用 double 作为键可能出现的问题。

【讨论】:

【解决方案2】:

你必须使用如下:

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

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

如果你有 C++11 或更高版本的兼容编译器,这也可以:

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

【讨论】:

  • make_pair 在 c++11 之前可用
  • 我也尝试过 make_pair,但 Dev-C++ 开始在头文件 stl_pair.h 中抱怨。我将使用错误消息编辑我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多