【问题标题】:why it gave random value from map为什么它从地图中给出随机值
【发布时间】:2015-11-18 22:54:31
【问题描述】:

我有一个 x = 5 的字符串,我将它拼接到 x 5 然后声明一个映射

 map<string, double> variableMap;

我把它们放到地图中使用

variableMap.insert(make_pair(splitString.at(0), stod(splitString.at(1))));

splitString.at(0) 将是 x,stod(splitString.at(1)) 将是 5

但是当我试图通过使用从查找键中获取值时

                 map<string, double>::iterator iter;

                 iter = variableMap.find("x");

                     cout << iter->second<<endl;

打印 6.95321e-310

这真的很奇怪

【问题讨论】:

  • 你能发布一些你的代码的sn-p吗?
  • 请发MCVE
  • 在使用-&gt;之前必须检查iter != variableMap.end()

标签: c++


【解决方案1】:

您可能弄错了 splitString,因此映射实际上不包含键“x”。使用前应检查 find 的结果是否与 variableMap.end() 相等。

iter = variableMap.find("x");
if(iter == variableMap.end()) {
  // not found ...
}

使用调试器,并验证该对具有正确的内容,包括字符串的空格。

您也可以打印它以检查它包含的内容:

for(auto elem : variableMap) {
   std::cout << ">"<<elem.first << "< " << elem.second << std::endl;
}

编辑:由于您的问题确实是空格,请考虑不要自己编写字符串操作,而是查看C++ - Split string by regex的最佳答案

【讨论】:

  • 是的,当我使用 if(iter != variableMap.end()) { coutsecond; } 它不打印任何东西。所以我想你是对的。键可能不包含在地图上。我正在检查字符串是否包含空格
  • 是的,这是空格的问题,我 splitString 错了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-03
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多