You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++无法将变量值插入std::map,make_pair调用报错如何解决?

问题原因

你调用make_pair时错误地显式指定了模板参数,导致参数类型不匹配。
std::make_pair的设计初衷是自动推导传入参数的类型生成对应pair实例,它的形参是万能引用(T&&),当你显式指定模板参数为std::string, int时,它期望接收的参数是std::string&&和int&&(右值引用),而你传入的three和num都是左值,左值无法直接绑定到非const右值引用,因此编译报错。
你写的第一行插入能正常编译,是因为传入的字符串字面量、数字字面量都是右值,刚好匹配显式指定的模板参数对应的形参类型。

正确修改方案

下面几种改法都可以实现需求,按需选择即可:

  • 方案1:去掉make_pair的显式模板参数,让其自动推导类型,这是最推荐的用法,符合make_pair的设计初衷:
int_map.insert(make_pair(three, num));
  • 方案2:显式构造std::pair对象,替代make_pair:
int_map.insert(pair<string, int>(three, num));
  • 方案3:使用C++11及以上版本支持的花括号初始化语法,写法更简洁:
int_map.insert({three, num});
  • 方案4:直接使用std::map的[]运算符赋值,如果对应的键不存在会自动插入,存在则会覆盖原有值:
int_map[three] = num;

内容的提问来源于stack exchange,提问作者Kenneth Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:06:04