g++13.1.0下unordered_map::contains报错,求排查解决方案
问题原因与解决方法
报错的核心原因是:仅修改c_cpp_properties.json不会影响实际编译行为——这个文件只是给VS Code提供语法提示用的,g编译时依然需要显式指定C20及以上的标准版本,才能识别contains方法(该方法在C++20中引入)。
具体解决步骤
编译命令添加标准参数
直接用g++编译时,必须加上-std=c++20或-std=c++23参数,示例命令:g++ -std=c++20 your_code.cpp -o output.exeg默认不会启用C20及以上标准,即使编译器版本支持,不指定参数会沿用旧标准编译,导致
contains被识别为未定义成员。VS Code用户需配置tasks.json
如果用VS Code的任务编译,要在tasks.json的编译参数里加入-std=c++20,示例配置片段:{ "args": [ "-fdiagnostics-color=always", "-std=c++20", // 新增这一行 "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ] }临时替代方案
要是暂时无法调整编译配置,可以用find方法实现相同逻辑:if (count.find(i) != count.end()) cout << i << ": Found\n"; else cout << i << ": Not found\n";
内容的提问来源于stack exchange,提问作者Mini-Touch
相关产品推荐
相关产品推荐

