std::_Xout_of_range 在映射中通过键访问值时出错
std::_Xout_of_range Error when accessing value by key in map
我有一个我真的不明白的问题。也许我不了解 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++ 异常,标志=0x1(无法继续执行)(第一次机会)在 MSVCP120D!std::_Xout_of_range
0x7ff83de9a1c8 异常,代码:0xe06d7363:C++ 异常,MSVCP120D 中的标志=0x1(无法继续执行)!std::_Xout_of_range
这表示请求的集合不在给定键下的映射中。这是抛出异常时调试视图中的变量:
我真的不明白。 te "Ich" 显然是 ma 中的一个键。有什么问题?还要深入地图:
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 "Ich" 已分配一个值,由键值对 2.
表示
std::map::at
当您确定键存在于地图中时,方法是好的。这里不是这种情况。在上面的截图中,地图中的键值是 "Ich",但是 te
变量的值是 "Ich "。
Space 在 te
变量的末尾是问题的原因。
您可以使用std::map::find
or std::map::count
检查映射中是否存在键。
我有一个我真的不明白的问题。也许我不了解 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++ 异常,标志=0x1(无法继续执行)(第一次机会)在 MSVCP120D!std::_Xout_of_range
0x7ff83de9a1c8 异常,代码:0xe06d7363:C++ 异常,MSVCP120D 中的标志=0x1(无法继续执行)!std::_Xout_of_range
这表示请求的集合不在给定键下的映射中。这是抛出异常时调试视图中的变量:
我真的不明白。 te "Ich" 显然是 ma 中的一个键。有什么问题?还要深入地图:
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 "Ich" 已分配一个值,由键值对 2.
表示std::map::at
当您确定键存在于地图中时,方法是好的。这里不是这种情况。在上面的截图中,地图中的键值是 "Ich",但是 te
变量的值是 "Ich "。
Space 在 te
变量的末尾是问题的原因。
您可以使用std::map::find
or std::map::count
检查映射中是否存在键。