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检查映射中是否存在键。