在无效的循环cout操作期间,元素会自动插入到std :: map

时间:2015-10-27 12:55:58

标签: c++ visual-c++

#include<iostream>
#include<map>
using namespace std;
int main() 
{
    map<int, string> sample;
    for (int i = 5; i > 0; i--)
        sample[i] = 'i' + i;
    map<int, string>::iterator i = sample.begin();
    for (int j = 1; j <= 10; j++) 
    {
        cout << sample[j] << endl;
    }
    for (; i != sample.end(); i++)
        cout << i->first;
    cout << "Size is :" << sample.size();
}

我运行此程序以了解有关std :: map的更多信息,即我将地图大小设置为10,请参阅下面的输出屏幕截图。

enter image description here

有人可以澄清为什么std :: map在无效循环显示功能中自动扩展。

2 个答案:

答案 0 :(得分:4)

std::map::operator [key]相当于(*((this->insert(make_pair(key, mapped_type()))).first)).second,因此如果元素不存在,则插入默认值。

您必须使用atfind不在map中插入元素,或使用迭代器。

答案 1 :(得分:1)

  

有人请说明为什么std :: map自动扩展为无效   循环显示功能。

std::map::operator[]

返回对映射到等效于键的键的值的引用, 执行插入(如果此类键尚不存在)