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

如何正确使用std::cout输出std::unordered_map元素避免报错

问题原因
  • 类型不匹配:你定义的points是std::unordered_map<std::string, int>类型,key的类型为std::string,但word[1]是char类型,二者类型不符,所以编译器抛出错误。
  • 隐藏逻辑问题:你读取分值文件、输出map值的代码都放在了cin输入循环结束之后,只有当你终止输入(例如按Ctrl+D/Ctrl+Z)时才会执行后续逻辑,此时word存储的是最后一次输入的单词,若单词长度不足2,访问word[1]会触发越界,导致程序崩溃。
修复方案

方案1(更推荐):修改map的key类型为char

因为你的分值配置本来就是单个字母对应分值,用char做key更符合业务逻辑,修改两处代码即可:

  1. 将map定义修改为:
std::unordered_map<char, int> points;
  1. 将存储字母的变量修改为char类型:
char letter;

修改后直接用word[1]访问map就不会出现类型错误。

方案2:不修改map类型,将char转为string后访问

如果不想调整map的定义,可以在访问时把单个字符转为长度为1的string:

std::cout << points[std::string(1, word[1])] << '\n';
额外逻辑优化建议

如果你需要为每一个输入的单词计算分值,应该调整代码逻辑的位置:

  • 分值文件只需要读取一次,放在main函数最开头执行即可,不需要放在输入循环之后
  • 单词分值计算逻辑放到cin输入循环内部,每读到一个合法单词就计算对应分值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:54:01