我有一个问题,我真的不明白。也许我并不了解C ++的一些基础知识,我实际上认为我做过。我基本上只想获得一个指向地图集的指针:
map<string, set<string>*>* ma = WindowCollection::testCase->getItems();
string te = ui->labelLeftUp->text().toStdString();
set<string>* itemSet = ma->at(te);
调试时,我在第3行遇到以下错误:
0x7ff83de9a1c8的异常,代码:0xe06d7363:C ++异常,flags = 0x1(执行无法继续)(第一次机会)在MSVCP120D中!std :: _ Xout_of_range
异常在0x7ff83de9a1c8,代码:0xe06d7363:C ++异常,flags = 0x1(无法继续执行)在MSVCP120D中!std :: _ Xout_of_range
这表示请求的集合不在给定密钥下的映射中。抛出异常时,以下是调试视图中的变量:
我真的不明白。 te&#34; Ich&#34;显然是马的关键。问题是什么?又向地图深入了一步:
mapped_type& at(const key_type& _Keyval)
{ // find element matching _Keyval
iterator _Where = this->lower_bound(_Keyval);
if (_Where == this->end()
|| this->_Getcomp()(_Keyval, this->_Key(_Where._Mynode())))
_Xout_of_range("invalid map<K, T> key");
return (_Where->second);
}
最后一行抛出异常。它是一样的。 Keyval&#34; Ich&#34;具有已分配的值,并且由键值对2表示。
答案 0 :(得分:0)
std::map::at
方法很好。情况并非如此。在上面的屏幕截图中,地图中的键值为“Ich”,但te
变量的值为“Ich”。
te
变量末尾的空格是问题的原因。
您可以使用std::map::find
或std::map::count
来检查地图中是否存在该密钥。