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

Windows下g++编译LeetCode代码报std::map无insert_or_assign错误

编译错误原因与解决方法

核心报错原因

  • 报错的本质不是编译器本身不支持这个接口,是编译时指定的C++标准版本过低:std::map::insert_or_assign 是C17标准正式纳入的map成员方法,只要编译时没有显式开启C17及以上版本的标准支持,g++就会按低版本标准的规则检查成员,自然会报“类无对应成员”的错误。
  • 常见的场景触发原因:Windows环境下通过MinGW安装的g++,在GCC 11之前的版本,默认启用的C标准是C14,本身就不包含C++17新增的接口,自然无法识别insert_or_assign方法。

快速解决方式

方法1:编译时显式指定C++标准版本

在原有的g++编译命令中追加-std=c++17参数,完整可运行的编译命令为:

g++ -std=c++17 p15.cpp -o p15.exe

执行上述命令即可消除当前的成员不存在报错。

注意:如果你在VSCode中通过内置的编译按钮执行构建,需要找到项目下.vscode/tasks.json文件,在编译参数列表里追加-std=c++17,才能保证IDE触发的编译命令也符合标准要求,避免手动在终端敲命令能编译、点按钮编译又报错的情况。

方法2:替换为兼容低版本标准的等价写法

如果不想调整编译参数,也可以直接把代码中使用insert_or_assign的行替换为C++11就支持的等价逻辑,完全不需要额外加编译参数:

  • 原代码行:store.insert_or_assign(arg_nums[0], v);
  • 替换为:store[arg_nums[0]] = v;

二者语义完全一致:如果键不存在就插入键值对,如果键已存在就覆盖原有的值,效果和insert_or_assign没有区别。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 22:15:00