std :: _ Xout_of_range在地图

时间:2016-11-11 07:14:31

标签: c++ nullpointerexception stdmap

我有一个问题,我真的不明白。也许我并不了解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

这表示请求的集合不在给定密钥下的映射中。抛出异常时,以下是调试视图中的变量:

enter image description here

我真的不明白。 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);
        }

enter image description here

最后一行抛出异常。它是一样的。 Keyval&#34; Ich&#34;具有已分配的值,并且由键值对2表示。

1 个答案:

答案 0 :(得分:0)

当您确定密钥存在于地图中时,

std::map::at方法很好。情况并非如此。在上面的屏幕截图中,地图中的键值为“Ich”,但te变量的值为“Ich”

te变量末尾的空格是问题的原因。

您可以使用std::map::findstd::map::count来检查地图中是否存在该密钥。